使用 Cron 确保后台进程正在运行

使用 Cron 确保后台进程正在运行

我正在尝试运行一个 PHP 后台进程,它是 Rabbit MQ 消息的消费者。我可以简单地将脚本运行为“php accept.php &”,但我需要确保此脚本始终在运行。

我编写了一个 bash 脚本,该脚本会尝试查找进程的 PID。如果找不到 PID,它会重新启动脚本。如果找到了进程,它只会回显 PID。

我尝试每小时在 Cron 上运行一次 Bash 脚本,以确保后台进程正在运行。但我没有激活它。如果我直接运行 Shell/Bash 脚本。它运行得很好。

Bash 脚本

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

您可以创建一个运行 bash 脚本的 systemd 服务,但该脚本应该能够持续运行。

在 /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

相关内容