我在 Cron 作业方面遇到了麻烦,我基本上有两个 PHP 脚本,我想在我的服务器上持续运行。目前我正在使用无限循环让它们继续前进,但它们似乎会在随机的时间停止。
理想情况下,我想编写一个脚本来检查脚本是否正在运行,如果没有则启动它们。
我想知道我该怎么做?
答案1
你想要的是一个守护进程,而不是一个 cron 作业。cron 作业用于执行某些操作定期地(或在启动时),不是用于保持进程存活。我鼓励您阅读该文章,然后做一些非常简单的事情,如下所示:
#!/bin/sh
while true
do
/my/script.php >> /var/log/my_script.log 2>&1
done
答案2
要检查正在运行的进程,您可以列出所有正在运行的进程(使用 ps),然后使用 grep 过滤要查找的进程:
ps aux | grep YOUR_PHP_COMMAND
如果您只想在命令未运行时启动命令,可以使用以下脚本:
CMD="/bin/sleep 3" # replace it with your command
if ! ps x|grep -v grep|grep "$CMD"; then
$CMD
fi
注意:您需要使用“grep -v grep”从进程列表中排除 grep 进程。
如果你想把它放在一个 CRON JOB 中,你可以用 ' 将它打包在一行中;'
CMD="/bin/sleep 3" ; if ! ps aux|grep -v grep|grep "$CMD"; then $CMD ; fi
请记住,CRON 作业非常适合安排事情。如果您只想保持程序运行,更好的方法是无限循环,每当程序结束时就启动该程序。