如何使用cron检查程序是否在后台运行,并在需要时启动它?

问题描述 投票:0回答:4

我的任务是在生产服务器上的后台运行守护程序。但是,我确实希望确保此守护程序始终运行。守护进程是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

我首先使用ifps执行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,但我也没有收到任何电子邮件。

谁能告诉我我的方法有什么问题?我怎么能开始呢?

php cron background-process daemon akeneo
4个回答
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
投票

这些任务有特殊服务。例如http://supervisord.org/

Supervisor是一个客户端/服务器系统,允许其用户监视和控制类UNIX操作系统上的许多进程。

你可以通过f.eqxxswpoi来管理它


0
投票

一个命令在命令行上运行而不在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

0
投票

我建议你使用grep CRON /var/log/syslog ,它会在失败的服务上自动重启处理这些问题,另外,你可以尝试将akeneo命令设置为服务。

否则,如果你想使用cronjobs,你可能有php二进制问题,你需要设置绝对路径:

supervisord

如果你使用cronjob,我也会建议:

  1. 检查cronjob的日志以了解其他问题 grep CRON / var / log / syslog
  2. 使用独立的bash脚本清理它(不要忘记chmod + x)
© www.soinside.com 2019 - 2024. All rights reserved.