サーバーでデーモンを実行しています。しばらくの間は問題なく動作しており、デーモンでイベントが発生するたびにログを記録しています。
昨日、私は奇妙なことに気づきました。デーモンは実行を停止しましたが、ログにエラー エントリはありませんでした。
このデーモンを実行し続け、何らかの理由で停止した場合は再開することが、私のシステムにとって非常に重要です。
特定のプロセスがUbuntuで実行されているかどうかを定期的に検出できる方法はありますか?? 検出できれば簡単に再開できますが、検出が大きな問題です
クローンを使用します。
x分ごとにスクリプトを実行させます
スクリプトで次のような行を使用します
ps aux | grep -c <your process/daemon name>
出力を確認します。
これは常に少なくとも 1 つ (プロセス自体をチェックするプロセス) を返すため、カウントが 1 より大きい場合は、プロセスが実行中であると見なして何もしないか、そうでない場合はデーモンを再起動できます。
https://help.ubuntu.com/community/CronHowto
特定のユーザー (wwwrun など) がプロセスを実行する必要がある場合は、必ずそのユーザーとしてプロセスを開始してください。
プログラムがコンソールから自動的に切り離されない (つまり、フォアグラウンドで実行し続ける) 場合は、次のようにすることができます。
while /bin/true; do
/PATH/TO/YOUR/daemon
logger -p local0.warn "daemon crashed"
done
これにより、警告がログに記録され、デーモン プロセスが再生成されます。それ以外の場合は、おそらくウォッチドッグを実行する必要があります。
PID=`cat /var/run/daemon.pid`
if [ -z `ps hp $PID` ]; then
logger -p local0.warn "daemon crashed"
fi
また
if [ -z `ps ax | grep [d]aemon` ]; then
logger -p local0.warn "daemon crashed"
fi
最初の例のようにループで、または Loopo が提案するように cron を介して。
最後の例でデーモン名の最初の文字を角括弧で囲んでいると、grep プロセスが出力に表示されなくなります。