pppd
によって制御される3GUSBモデムを介してワールドに接続するRaspberryPiシステムでレポートシステムを設計しています。
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
終了コードを取得するにはどうすればよいですか?ビンゴ!
'nodetach'をコマンドライン引数としてpppdに入力すると、デーモンはそれ自体をフォークしません。必要なのは標準の「echo $?」スクリプトの次の行:
pppd call my_provider nodetach maxfail 3
echo $?
'pppd'を呼び出した後、変数 '$?'の値を取得する必要があります。
$?
-最後のプログラムの終了コードを取得します。
バックグラウンドプロセスの場合 '$!'いくつかのカバーで役立つかもしれません。
$!
-最後に実行されたバックグラウンドプロセスのPIDを取得します。
シナリオ例:
run_background_process &
pid_of_background_process=$!
wait $pid_of_background_process
echo "Result code of background process: "$?