监控进程 pid 的变化

监控进程 pid 的变化

我有一项应该始终运行的服务。我想知道服务何时停止或重新启动。

我考虑过引用服务的 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 脚本中,该脚本会在服务退出时通知您。但是,如果进程自行守护进程,则这将不起作用。

相关内容