Cron 作业保持守护进程运行?

Cron 作业保持守护进程运行?

让我们假设我有一个这样的 cron 作业:

*/15 * * * * /path/to/thedaemon

守护进程(它是一个 python 守护进程,通过from daemon import runner)将不允许其自身的多个实例,这本身就非常好。当守护进程已经运行时,它尝试启动它,结果如下:

lockfile.LockTimeout: Timeout waiting to acquire lock for /tmp/thedaemon.pid

当然,cron 作业并不关心 - 它可以继续定期执行命令,以便在它没有运行的情况下,它然后开始运行。但这不是很优雅。

更优雅的是,有没有办法设置 cron 作业在启动之前知道守护进程是否正在运行? 也许是一个简写的 if 条件?

简而言之,如何设置 cron 作业以确保守护进程正在运行?

如果正在运行,则不执行任何操作。如果未运行,则启动。

答案1

您可以将 python 守护进程包装在 shell 脚本中。首次启动时,检查该进程是否已在运行:

pid=$(cat pid.file)
ps -ef | grep $pid | grep <command to start daemon>
if [[ $? -eq 0 ]]; then
    echo "daemon already running" & exit 1
else
    <command to start daemon> & \
             echo $! > pid.file
fi

相关内容