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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用cron检查程序是否在后台运行,并在需要时启动它?相关的知识,希望对你有一定的参考价值。

我的任务是在生产服务器上的后台运行守护程序。但是,我确实希望确保此守护程序始终运行。守护进程是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,但我也没有收到任何电子邮件。

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

答案

一个简单和旧式的是创建一个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,我也会建议:

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

以上是关于如何使用cron检查程序是否在后台运行,并在需要时启动它?的主要内容,如果未能解决你的问题,请参考以下文章

使用 cron 时的 MySQL 性能差异

是否应该使用“&”指定 linux cron 作业以指示在后台运行? [关闭]

如何在应用程序运行时连续检查互联网连接

仅当应用程序打开并运行时,如何在后台运行方法?

使用cron进行调度时如何在shell脚本中grep命令的输出

如何检查 Quartz cron 作业是不是正在运行?