KerneldはPPPといったモジュールを必要に応じてロードします。kerneld-HOWTO
に書かれている追加機能は,特定のルートが失われたらスクリプトを呼び出すという
機能があるというものです。Kerneldはシェルスクリプト/sbin/request-route
を探します。以下のスクリプトはmodules-2.0.0.tar.gz
にあった
スクリプトのコピーです。
/sbin/request-route:
#!/bin/sh LOCK=/var/run/request-route.pid export PATH=/usr/sbin:$PATH # for ppp-2.2* # This script will be called from kerneld with the requested route as $1 # $1として要求されるルートで、このスクリプトがkerneldから呼び出されます。 chatfile=/etc/ppp/$1 # If no chatscript exists use a default value (symlink to preferred script): # chatスクリプトがなければデフォルト値を使います # (参照されるスクリプトへのシンボリックリンク): [ ! -f $chatfile ] && chatfile=/etc/ppp/default # Check if we're already running: # 実行されているかどうかチェックする: if [ ! -f $LOCK ] ; then pppd connect "chat -f $chatfile" & # Timer to be killed by ip-up, tunable! Check kerneld delay as well # ip-upによってkillされるタイマ。変更できます!kerneldもチェック。 sleep 60 & sleepid=$! echo $sleepid > $LOCK wait $sleepid rm -f $LOCK exit 0 fi exit 1
/sbin/request-route x.x.x.xスクリプトは'request-route'-要求(instances)の重複を防ぐためにロックファイル (
lock-file
)を使います(訳注:ロックファイルがあるデバイスは他から
使用できないようになります)。
最初はネームサーバへの参照があった時にスクリプトが起動されるように
していました。しかし、ローカル(=自分のマシン)で(キャッシュ用に)ネー
ムサーバを走らせようとすると、(最初の)参照がキャッシュされるため、2
度目(以降)の参照では(外部へアクセスが無いため)接続が確立しません。
異なるリンク用のチャットスクリプト(chat-scripts)を複数つくるか デフォルトのチャットスクリプトでISP(プロバイダ)に接続するようにします。
リンクが確立されたらpppdは/etc/ppp/ip-up
スクリプトを実行します。
これはロックファイルを削除するものです。sendmailのキュー実行(queue-run)のよう
に、リンクが確立される時はいつでも実行したいコマンドを追加します。
#!/bin/ash LOCK=/var/run/request-route.pid [ -f $LOCK ] && kill `cat $LOCK` # Execute these commands after connecting: # 接続後実行するコマンド: #/usr/sbin/sendmail -q
/usr/sbin/ppp-off:
#!/bin/sh LOCK=/var/run/request-route.pid DEVICE=ppp0 rm -f $LOCK # # If the ppp0 pid file is present then the program is running. Stop it. # ppp0 PIDファイルがあればkillする。 if [ -r /var/run/$DEVICE.pid ]; then kill -INT `cat /var/run/$DEVICE.pid` # # If unsuccessful, ensure that the pid file is removed. # 不成功なら、PIDファイルが削除されていることを確認。 if [ ! "$?" = "0" ]; then echo "removing stale $DEVICE pid file." rm -f /var/run/$DEVICE.pid exit 1 fi # # Success. Terminate with proper status. # 成功。適当な状態で終りました。 echo "$DEVICE link terminated" exit 0 fi # # The link is not active # リンクがアクティブではない。 echo "$DEVICE link is not active" exit 1