他のプロセスから stderr を受け取ると、プロセスを再起動します。

他のプロセスから stderr を受け取ると、プロセスを再起動します。

ローカルで収集されたデータの一部をエンドポイントに公開する継続的に実行されるプロセスがあります。今raspberryPi Wi-Fiモジュールにいくつかの問題があり、しばしば接続が切断されます。ネットワークを再起動した後、再び動作を開始しました。

だから、これはインターネット接続が失われるたびにstderrを投げ始めるproc1に基づいています。

while true; do
   ./proc1 2>&1 >/dev/null | sudo /etc/init.d/networking restart
done &

しかし、このコードはネットワークを何度も再起動する理由はわかりません。

私が本当に欲しいのはこれです:

while true: 
   if proc1 has stderr: 
      sudo /etc/init.d/networking restart; 
      sleep 10;

だから私の質問は次のようになります

  1. この疑似コードをbashに変換するにはどうすればよいですか?
  2. これは、ネットワーク切断の実際の問題を解決するためのハッキングです。問題をどのようにデバッグできますか?

ベストアンサー1

修正する

これはもっと簡単です:

( 
{ ${PROC1_CMD} >&3 } 2>&1 | 
    while : ; do 
        grep -q "YOUR ERROR MESSAGE" && ${YOUR_ACTION} 
    done
) 3>&2

基本的に、私たちはプロセスが何を言いたいのかにかかわらず、この方法で出力できるようにstdinand stderrforを交換するだけです。通常は大丈夫ですが、不要なメッセージを作成したら、次のことができます。$PROC1_CMDgrep|pipe.stderr$YOUR_ACTION.

おすすめ記事