1

Я пытаюсь запустить фоновый процесс PHP, который является потребителем сообщений Rabbit MQ. Я могу просто запустить скрипт как «php receive.php &», но мне нужно убедиться, что этот скрипт всегда работает.

Я собрал скрипт bash, который пытается найти PID процесса. Если он не находит PID, он запускает резервное копирование скрипта. Если он действительно находит процесс, он просто повторяет PID.

Я пытаюсь запускать Bash Script на Cron каждый час, чтобы убедиться, что фоновый процесс запущен. Но я не активирую. Если я запускаю Shell/Bash Script напрямую. Работает отлично.

Bash Script

p=$(pidof -s php receive.php)
if [[ -z "${p// }" ]]
        then php /var/www/html/example.com/public_html/receive.php &
        else echo 'Receive Already Running';
fi

Crontab -e линия

# m h  dom mon dow   command
0 * * * * /var/www/html/example.com/public_html/analytics.sh

Что я могу сделать по-другому, чтобы убедиться, что этот фоновый процесс всегда запущен, а если нет, перезапустить сам?

1 ответ1

2

Вы можете создать службу systemd, которая запускает ваш bash-скрипт, но скрипт должен иметь возможность непрерывного запуска.

Создайте файл в /etc /systemd /system /

[Unit]
Description=Add a description here

[Service]
Type=simple
ExecStart=/var/www/html/example.com/public_html/analytics.sh
Restart=always

[Install]
WantedBy=multi-user.target

запустите systemctl daemon-reload , а затем systemctl start SERVICENAME

или же

если процесс, который вы хотите отслеживать, уже является службой systemd, измените службу так, чтобы Restart=always .

редактировать:

Если служба работает должным образом, вам нужно enable ее при загрузке: systemctl enable SERVICENAME

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .