常に実行する必要があるサービスがあります。サービスがいつ停止するか再起動するかを知りたいです。
サービスのPID参照を検討しました。再起動すると新しいPIDが得られます。だからpidが変わったら警告やメールを送りたいです。これを行う最も侵害的な方法は何ですか?
これで、5分ごとにファイルにpidを書き込むcron操作ができました。このファイルのpid変更を監視するためのLinuxツールはありますか?それとも、外部で実行されているPythonスクリプトなど、このファイルを抽出してそのように監視できる他のものが必要ですか?
答え1
ヴィンス氏、継続的なモニタリングのために、Nagiosなどのオープンソースソリューションを見てみることをお勧めします。あなたの質問について、以下のBASHスクリプトprog_stat.shは毎秒DATEとPIDをファイルに記録し、スクリプトに追加することでPIDの変更を解析し、それに続くアクションを追加できます。 CTRL-Cを殺す
Nagiosの開発に使用するマシンがあります。このスクリプトは、毎秒そのマシンのNagios PIDをチェックします。睡眠を変えてテストの頻度を変えてください。
#!/bin/bash
PROG=Nagios
LOG=/home/user/nagios_pid.log
echo "" > $LOG
while true; do
PID=`ps ax | grep -i "$PROG" | awk 'NR==1{print $1}'`
echo `date -u` " " $PID >> $LOG
sleep 1
done
exit
スクリプト出力
[user ~]#cat nagios_pid.log
Sat Mar 30 11:15:50 UTC 2019 1171
Sat Mar 30 11:15:51 UTC 2019 1171
Sat Mar 30 11:15:52 UTC 2019 1171
Sat Mar 30 11:15:53 UTC 2019 1171
Sat Mar 30 11:15:54 UTC 2019 1171
Sat Mar 30 11:15:55 UTC 2019 1171
Sat Mar 30 11:15:56 UTC 2019 1261
Sat Mar 30 11:15:57 UTC 2019 1261
Sat Mar 30 11:15:58 UTC 2019 1261
Sat Mar 30 11:15:59 UTC 2019 1261
変更の整理:
[user ~]# sort -k 7,7 -u nagios_pid.log
Sat Mar 30 11:15:50 UTC 2019 1171
Sat Mar 30 11:15:56 UTC 2019 1261
これで、潜在的に長いファイルを手動で解析する必要なく、サービスが再起動された時期を確認できます。
- 表示
答え2
システムがsystemdによって制御され、多くの最新のシステムが制御されている場合(systemctl
この場合を確認するには入力してください)、サービスの再起動時にアクションを実行するように構成できます。この回答ServerFaultには1つの例しかありません。
別の解決策は、サービスが終了したときにそれを知らせるシェルスクリプトでサービスをラップすることです。ただし、プロセスが独自にデーモン化されている場合は機能しません。