標準出力でメッセージが検出されたら、プロセスを再開します。

標準出力でメッセージが検出されたら、プロセスを再開します。

プロセスを監視し(Supervisordを使用するなど)、特定のテキスト行が標準出力に出力されたときにプロセスを再開する方法はありますか?

私の場合、確認する行は次のとおりです。

    Net Exception [in file "src/ErrorHandler.cpp", line 38]

この行をstdoutに入れると、プロセスが再起動されるようになります。

どんな助けでも大変感謝します。

答え1

たとえば、grepを使用して監視する必要があるため、わかりstdoutません。

PIDFILE=/tmp/.pid.$$
(
    while true; do
        ./program &
        echo $! > $PIDFILE
        # echo "Program restarted at $( date )" >> /var/log/program.log
    done
) | while read X; do
  echo "$X"
  if (echo "$X" | grep "search" > /dev/null); then
      PID=$( cat $PIDFILE )
      # echo "Found ${X} on $(date), PID ${PID}" >> /var/log/program.log
      kill -TERM $PID
  fi
done

プログラムはprogram継続的に実行され、対応する出力とPIDはサブシェルによって収集されます。その後、必要に応じて、パイプシェルはTERM信号をプログラムに送信し、サブシェルにプログラムを再起動させます。

答え2

expectあなたにぴったりのツールです。読むman expect

expectインタラクティブなプログラムとプログラミングの会話を共有しましょう。

関連情報