|
|
次のページ
前のページ
目次へ
7. ダイアルオンデマンド(Dial-on-Demand)KerneldはPPPといったモジュールを必要に応じてロードします。kerneld-HOWTO
に書かれている追加機能は,特定のルートが失われたらスクリプトを呼び出すという
機能があるというものです。Kerneldはシェルスクリプト
/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
Kerneldは引数として無くなったルートを使ったこのスクリプトを実行します。 /sbin/request-route x.x.x.xスクリプトは'request-route'-要求(instances)の重複を防ぐためにロックファイル ( lock-file)を使います(訳注:ロックファイルがあるデバイスは他から
使用できないようになります)。
最初はネームサーバへの参照があった時にスクリプトが起動されるように
していました。しかし、ローカル(=自分のマシン)で(キャッシュ用に)ネー
ムサーバを走らせようとすると、(最初の)参照がキャッシュされるため、2
度目(以降)の参照では(外部へアクセスが無いため)接続が確立しません。
異なるリンク用のチャットスクリプト(chat-scripts)を複数つくるか デフォルトのチャットスクリプトでISP(プロバイダ)に接続するようにします。 リンクが確立されたらpppdは #!/bin/ash LOCK=/var/run/request-route.pid [ -f $LOCK ] && kill `cat $LOCK` # Execute these commands after connecting: # 接続後実行するコマンド: #/usr/sbin/sendmail -q 'idle-disconnect'オプションは自動的にアイドルリンクを切断します。直接 PPPを切断するときは'ppp-off'スクリプトを実行します。 /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
次のページ 前のページ 目次へ |
[ |