他のプロセスが実行中であることを確認するプロセス? [コピー]

他のプロセスが実行中であることを確認するプロセス? [コピー]

私は現在、顧客の家にコンピュータを配布しています。

次のスクリプトを実行しています。

  1. ngrok(ssh フォワードトンネルデーモン)
  2. heartbeat.py(コンピュータがアクティブであることを確認するためにハートビート信号をログに送信するスクリプト)
  3. metrics.py(すべての環境データ(温度、ディスク容量など)をログに記録するスクリプト)

したがって、これまでのテストではmetric.pyは少し不安定です(時々クラッシュすることを意味します)。

* NIXには以下を実行するパッケージがありますか?

  1. プロセスがX秒ごとに実行されることを確認する
  2. #1が真でない場合は実行してください。
  3. プロセスのリストについては、次のようにします。

答え1

私がそれを嫌うほどsystemd、それが確かに効果があることを認めなければなりません。

すべてのinitシステムが失敗したプロセスの自動再起動をサポートするわけではありません。

ただし、プロセスがまだ「実行中」であることを確認することは、実行できる最も基本的なヘルスチェックです。プログラムのメインループが「生きていますか?」を確認できれば、より良いでしょう。メッセージを残して返信を送ってください。これにより、無限ループに閉じ込められたり完了できないI / Oを待つことが停止したわけではないことがわかります。

答え2

おそらく簡単なスクリプトが役に立ちます。

ps -axu | grep '[n]grok' 2>&1 1>/dev/null || bash -c "ngrok"

上記のスクリプトは実行状態を確認しngrok、実行されていない場合はコマンドを実行して起動します。コマンドの括弧は、grepgrepコマンド自体の結果をフィルタリングするのに役立ちます。

これをcron設定ファイルに追加すると、定期的に確認されます。

メモ:

確認と再起動の間に少しの遅延を追加し、ngrok重大な問題が発生して再起動できなくなるのを防ぐために再試行制限を設定することもできます。

関連情報