我有一项应该始终运行的服务。我想知道服务何时停止或重新启动。
我考虑过引用服务的 PID。如果重新启动,它将获得一个新的 pid。所以我想在 pid 发生变化时发送警报或电子邮件。这样做的侵入性最小的方法是什么?
现在我有一个 cron 作业,每 5 分钟将 pid 写入一个文件。有没有一个Linux工具可以监控这个文件的pid变化?或者我应该有一些其他的东西,比如在外部运行的Python脚本,可以提取这个文件并以这种方式进行监控?
答案1
Vince,为了持续监控,我建议您研究开源解决方案,例如 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 上只给出了一个例子。
另一种解决方案是将您的服务包装在 shell 脚本中,该脚本会在服务退出时通知您。但是,如果进程自行守护进程,则这将不起作用。