web-dev-qa-db-ja.com

pppd終了コードを取得します-どのように?

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終了コードを取得するにはどうすればよいですか?
  • 別のアプローチを使用する必要がありますか(どちら)?
1
DmitryD

ビンゴ!

'nodetach'をコマンドライン引数としてpppdに入力すると、デーモンはそれ自体をフォークしません。必要なのは標準の「echo $?」スクリプトの次の行:

pppd call my_provider nodetach maxfail 3
echo $?
0
DmitryD

'pppd'を呼び出した後、変数 '$?'の値を取得する必要があります。

$?-最後のプログラムの終了コードを取得します。

バックグラウンドプロセスの場合 '$!'いくつかのカバーで役立つかもしれません。

$!-最後に実行されたバックグラウンドプロセスのPIDを取得します。

シナリオ例:

run_background_process &
pid_of_background_process=$!
wait $pid_of_background_process
echo "Result code of background process: "$?
0
Yurij Goncharuk