Как я могу проверить, работает ли программа в фоновом режиме, используя 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

Я сначала делаю if с ps а также grep -c чтобы проверить, существуют ли процессы с заданным именем, а если нет: я запускаю команду, заканчивающуюся &, заставляя его начать.

Приведенная выше команда работает, если я выполняю ее из командной строки, процесс запускается, и я вижу, что он работает, когда я выполняю простую ps ax-command.

Однако, как только я пытаюсь сделать это с помощью 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

Я также установил MAILTO— заголовок в crontab, но я тоже не получаю никаких писем.

Может кто-нибудь сказать мне, что не так с моим подходом? И как я могу начать это?

0

Решение

Простой и старый стиль — создать 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-подобных операционных системах.

И вы можете управлять им через е.е. https://github.com/supervisorphp/supervisor

1

Команда, работающая в командной строке и не работающая в 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
0

я бы порекомендовал вам использовать supervisord, он решает такие проблемы с автоматическим перезапуском на отказавших сервисах, кроме того, вы можете попытаться установить команды akeneo как сервис.

В противном случае, если вы захотите сделать это с помощью cronjobs, у вас может возникнуть проблема с бинарным файлом php, вам нужно установить абсолютный путь:

e.g : /usr/bin/php

Я также рекомендовал бы, если вы используете cronjob:

  1. Проверьте журналы cronjob для дополнительных проблем

    grep CRON / var / log / syslog

  2. Очистите его с помощью автономного скрипта bash (не забудьте chmod + x)

0
По вопросам рекламы [email protected]