我的任务是在生产服务器上的后台运行一个守护进程。但是,我确实希望确保此守护程序始终运行。守护进程是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
以检查是否存在使用给定名称运行的进程,如果没有:我以{{1}结束命令迫使它开始。
上面的命令有效,如果我从命令行执行它,进程就会启动,当我执行一个简单的&
命令时,我可以看到它正在运行。
但是,只要我尝试使用crontab执行此操作,它就无法启动:
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
- 标题,但我也没有收到任何电子邮件。
有谁能告诉我我的方法有什么问题?我怎么能开始呢?
答案 0 :(得分:2)
简单和旧式的是创建一个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文件。
答案 1 :(得分:1)
此类任务有特殊服务。例如http://supervisord.org/
进行管理Supervisor是一个客户端/服务器系统,允许其用户在类UNIX操作系统上监视和控制许多进程。
答案 2 :(得分:0)
一个在命令行上工作而不在CRON中工作的命令,这件事发生在我身上,这就解决了我的问题。
在终端中运行echo $PATH
,复制整个输出。
然后输入crontab -e
并在文件顶部写下此
PATH=WHATEVER_YOU_COPIED_FROM_LAST_COMMAND_OUTPUT
PS:(更多建议)
我认为您需要在Ubuntu上安装apt-get install postfix
才能发送电子邮件。
您还应该看到
的CRON日志grep CRON /var/log/syslog
答案 3 :(得分:0)
我建议您使用supervisord,它会在失败的服务上自动重启处理这些问题,此外,您可以尝试将akeneo命令设置为服务。
否则,如果你想使用cronjobs来做,你可能有php二进制问题,你需要设置绝对路径:
e.g : /usr/bin/php
如果您使用cronjob我也会建议:
检查cronjob的日志以了解其他问题
grep CRON / var / log / syslog
使用独立的bash脚本清理它(不要忘记chmod + x)