私はpppd
。
接続は99,999%の間うまく機能しますが、時には切断され、モデムを物理的に再接続しないと、追加の再接続が失敗します。
本番ボックスはリモートで機能し、物理的にアクセスできないため、何とか管理する必要があります。
私の考えは、システムの起動時に別のスレッドで一種のスクリプトを実行することです。以下の疑似コードを参照してください。
while(true){
wait_for_modem_device_to_appear
start_pppd # may_be limiting retries not to default 10, but to, say, 3
wait_for_pppd_to_finish
if(exitcode_is_one_of(6,7,8,10,15,16)){
reset_usb_port_programmatically #I have tools for that
}else{
break
}
}
pppd
終了コードをどのように取得できますか?- 別の方法(どの方法)を使用する必要がありますか?
答え1
"pppd"を呼び出した後は "$?"変数の値を取得する必要があります。
$?
- 最後のプログラムの終了コードを取得します。
バックグラウンドプロセス「$!」にいくつかのカバーを追加すると便利です。
$!
- 最後に実行されたバックグラウンドプロセスのPIDを取得します。
例のシナリオ:
run_background_process &
pid_of_background_process=$!
wait $pid_of_background_process
echo "Result code of background process: "$?
答え2
ビンゴ!
pppdのコマンドライン引数として "nodetach"を使用すると、デーモン自体はフォークされません。必要なのは、スクリプトの次の行にある標準の「echo $?」です。
pppd call my_provider nodetach maxfail 3
echo $?