如何检查守护进程是否正在运行

我有一个简单的bash脚本,我想作为一个守护进程运行…

#!/bin/bash while true; do crontab cron sleep 58m done 

我运行这个守护进程使用这个命令…

 setsid copy_cron.sh >/dev/null 2>&1 < /dev/null & 

[1] 17025

但一旦运行,我无法find一个进程在ps -aux ..?

如何确保守护进程正在运行,或者如果需要的话就杀掉它?

只要做到这一点

 ~$ nohup copy_cron.sh & 

ps awx它会显示为正在运行

 7168 pts/2 R 0:04 /bin/bash ./copy_cron.sh 

像这样杀死它

 ~$ kill 7168 

首先,你的脚本没有指定cron文件的绝对path,所以它依赖于在正确的目录中启动。

其次,在一个独立的自由运行循环中进行,而不是将其链接到生成文件的进程,这很容易出现。

第三,用户crontab每次都会被覆盖,导致任何可能被某人或别的东西添加的条目都会丢失。

没有致命的缺陷,但是违反了我的经验中最不让人惊讶的原则。

如果你的目标是保持crond运行,我会build议使用Monit 。

但是,在大多数情况下,cron守护程序不会停止运行,所以这可能不是必需的。

作为参考,我为我的系统提供了这种types的保护,我使用了一个如下所示的Monitconfiguration:

 check process cron with pidfile "/var/run/crond.pid" start program = "/sbin/service crond start" stop program = "/sbin/service crond stop" 

如果您的目标是按计划运行某些内容,请使用cron。