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

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

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

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

我使用此命令将其作为守护进程运行......

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

[1] 17025

但是一旦它运行,我就无法在 ps -aux 中找到它的进程。

我如何确保守护进程正在运行,或者在需要时终止它?

答案1

只需这样做

~$ nohup copy_cron.sh &

ps awx看起来运行如下

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

像这样杀死它

~$ kill 7168

答案2

首先,您的脚本没有指定cron文件的绝对路径,因此它依赖于在正确的目录中启动。

其次,在独立的自由运行循环中执行此操作而不是将其链接到生成文件的进程中,这容易导致竞争。

第三,用户 crontab 每次都会被覆盖,导致由脚本以外的其他人或物添加的任何条目丢失。

没有致命的缺陷,但是违反了最小惊讶原则,根据我的经验,当系统投入生产时,这往往会给你带来麻烦。

答案3

如果你的目标是继续crond跑步,我建议使用监控

但是,在大多数情况下,cron守护进程没有理由停止运行……所以这可能没有必要。

作为参考,我确实对我的系统有这种类型的保护,并且我使用如下的 Monit 配置:

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

如果您的目标是按计划运行某些操作,只需使用 cron。

相关内容