首先。我对 bash 脚本一无所知。其次,这对我来说是一个非常大的问题,我不知道该怎么办。
目前,我有这个网站。它是用 php 编写的。并使用邮件服务器和推送通知,它们都使用 Supervisord 作为守护进程运行。我的网站运行良好,但有时,我的邮件服务器和推送通知无法工作,因为 Supervisord 停止工作;我不得不手动重新启动它才能使其再次工作。
我在想,我该怎么做才能让它自动启动。然后一个想法冒了出来。通过 bash 脚本和 cron 作业重新启动服务。我知道这有点蠢。
我创建了一个 bash 脚本。只是一个简单的脚本。
#!/bin/bash
# A simple script
echo " -- Restarting Supervisord --"
sudo service supervisor stop
sudo service supervisor start
echo "Done!"
当我通过手动运行这个
./supervisord_restart.sh
这是我得到的输出
-- Restarting Supervisord --
Job for supervisor.service failed. See "systemctl status supervisor.service" and "journalctl -xe" for details.
Done!
我也不知道这在 cronjob 中是否正确
0 0,12 * * * /supervisord_restart.sh
顺便说一下,如果我做的对的话。我需要我的 bash 脚本来检查 suprevisord 是否正在运行,然后执行命令。
答案1
首先:你应该调查“真实的”与 Supervisord 相关的问题,而不是每晚重新启动服务。
话虽如此,请尝试使用/etc/init.d/supervisor stop
/start
或restart
。cron 使用 时经常会出现问题service
。您还必须以运行于用户 Supervisord 的身份创建 cron,或者通过 以 root 身份创建 cron 。sudo crontab -e
此外,在 cron 中始终使用完整路径,因此不要使用/supervisord_restart.sh
but/usr/local/bin/supervisord_restart.sh
或类似的。
(以及:你运行的是什么 Linux 发行版)
答案2
假设你的服务有一个status
命令,你可以在 cron 作业中执行一些简单的操作:
0 0,12 * * * service whatever status >/dev/null || service whatever restart
这样,您首先运行状态检查,丢弃详细输出,然后验证退出代码不是 0(这很好),在这种情况下 - 重新启动。
确实,通过这样的轻量级检查,您可以更频繁地运行 cron 作业。
如果您从 cron 作业收到“找不到命令”错误,则它可能不在默认 PATH 中,因此请在调用前加上 /usr/sbin/ 或 /sbin/ 或系统上的任何位置。