首先。 我什么都不知道bash脚本。 第二,这是我的一个很大的问题,我不知道该怎么做。
目前,我有这个网站。 这是用PHP编写的。 并使用邮件服务器和推送通知,这些都是使用supervisord作为守护进程运行的。 我的网站运行良好,但不时,我的邮件服务器和推送通知不工作,因为supervisord停止工作; 我不得不手动重新启动,使其重新工作。
我在想,我能做些什么来让它自动启动。 那么一个想法popup。 通过bash脚本和cron作业重新启动服务。 我知道这有点愚蠢。
我创build了一个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是否正在运行,然后执行命令。
首先:你应该用supervisord来调查“真实”的问题,而不是每天晚上重新启动服务。
这就是说,尝试使用/etc/init.d/supervisor stop / start或restart 。 很多时候cron使用service都有问题。 您还必须在用户supervisord运行时创buildcron,或者通过sudo crontab -e以root身份运行。 也总是在cron中使用完整的path,所以不是/supervisord_restart.sh而是/usr/local/bin/supervisord_restart.sh或类似的。
(并且:你在运行什么Linux发行版)
假设你的服务有一个status命令,你可以像在cron作业一样简单:
0 0,12 * * * service whatever status >/dev/null || service whatever restart
这样,你首先运行状态检查,放弃详细输出,然后validation退出代码不是0(这将是好的),在这种情况下 – 重新启动。
事实上,通过这样的轻量级检查,您可以更频繁地运行cron作业。
如果你从cron作业中得到'command not found'错误,它可能不在默认PATH中,所以在/ usr / sbin /或/ sbin /或者你的系统中的任何地方加上前缀。