我正在尝试运行一个 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