我的任务是在生产服务器上的后台运行守护程序。但是,我确实希望确保此守护程序始终运行。守护进程是PHP进程。
我试图通过检查守护程序是否正在运行来解决此问题,如果没有:启动它。所以我有一个命令:
if [ $(ps ax | grep -c "akeneo:batch:job-queue-consumer-daemon") -lt 3 ]; then php /home/sibo/www/bin/console akeneo:batch:job-queue-consumer-daemon & fi
我首先使用if
和ps
执行grep -c
以检查是否存在使用给定名称运行的进程,如果没有:我启动以&
结尾的命令,强制它启动。
上面的命令有效,如果我从命令行执行它,进程就会启动,当我执行一个简单的ps ax
命令时,我可以看到它正在运行。
但是,只要我尝试使用crontab执行此操作,它就无法启动:
* * * * * if [ $(ps ax | grep -c "akeneo:batch:job-queue-consumer-daemon") -lt 3 ]; then php /home/sibo/www/bin/console akeneo:batch:job-queue-consumer-daemon & fi
我还在crontab中设置了MAILTO
-header,但我也没有收到任何电子邮件。
谁能告诉我我的方法有什么问题?我怎么能开始呢?
一个简单和旧式的是创建一个bash文件,你基本上检查进程是否正在运行,否则你启动它。
这里是bash文件的内容:
#!/bin/bash
if [ $(ps -efa | grep -v grep | grep job-queue-consumer-daemon -c) -gt 0 ] ;
then
echo "Process running ...";
else
php /home/sibo/www/bin/console akeneo:batch:job-queue-consumer-daemon
fi;
然后在crontab文件中运行bash文件。
这些任务有特殊服务。例如http://supervisord.org/
Supervisor是一个客户端/服务器系统,允许其用户监视和控制类UNIX操作系统上的许多进程。
你可以通过f.eqxxswpoi来管理它
一个命令在命令行上运行而不在CRON中工作,这发生在我身上,这就解决了我的问题。
在终端中运行https://github.com/supervisorphp/supervisor,复制整个输出。
然后输入echo $PATH
并在文件顶部写下这个
crontab -e
PS :(更多建议)
我认为你需要在Ubuntu上安装PATH=WHATEVER_YOU_COPIED_FROM_LAST_COMMAND_OUTPUT
才能发送电子邮件。
您还应该看到CRON日志
apt-get install postfix
我建议你使用grep CRON /var/log/syslog
,它会在失败的服务上自动重启处理这些问题,另外,你可以尝试将akeneo命令设置为服务。
否则,如果你想使用cronjobs,你可能有php二进制问题,你需要设置绝对路径:
supervisord
如果你使用cronjob,我也会建议: