1

I have the task to run a daemon in the background on a production server. However, I do want to be sure that this daemon always runs. The daemon is PHP process.

I tried to approach this by checking if the daemon is running, and if not: start it. So I have a command like:

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

I first do an if with ps and grep -c to check if there are processes running with a given name, and if not: I start the command ending with an &, forcing it to start.

The above command works, if I execute it from the command line the process gets started and I can see that is is running when I execute a simple ps ax-command.

However, as soon as I try to do this using the crontab it doesn't get started:

* * * * * 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

I also set the MAILTO-header in the crontab, but I'm not getting any e-mails as well.

Can anyone tell me what's wrong with my approach? And how I can get it started?

4

4 回答 4

3

一个简单且老式的方法是创建一个 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 文件。

于 2018-03-02T10:45:38.417 回答
1

有针对此类任务的特殊服务。例如http://supervisord.org/

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

你可以通过 fe https://github.com/supervisorphp/supervisor来管理它

于 2018-03-02T10:37:30.963 回答
0

一个在命令行上工作而不在 CRON 中工作的命令,这发生在我身上,这就是解决我的问题的方法。

在终端中运行echo $PATH,复制整个输出。

然后crontab -e在文件顶部输入和,写这个

PATH=WHATEVER_YOU_COPIED_FROM_LAST_COMMAND_OUTPUT

PS:(更多建议)

我认为您需要apt-get install postfix在 Ubuntu 上安装才能发送电子邮件。

您还应该通过以下方式查看 CRON 日志

grep CRON /var/log/syslog
于 2018-03-02T10:36:17.977 回答
0

我建议您使用supervisord,它可以通过在失败的服务上自动重启来处理这些类型的问题,此外,您可以尝试将 akeneo 命令设置为服务。

否则,如果您想使用 cronjobs 执行此操作,您可能会遇到 php 二进制文件的问题,您需要设置绝对路径:

e.g : /usr/bin/php

如果你使用 cronjob,我也会推荐:

  1. 检查 cronjob 的日志以了解其他问题

    grep CRON /var/log/syslog

  2. 使用独立的 bash 脚本清理它(不要忘记 chmod +x)

于 2018-03-02T10:48:01.303 回答