通过cronjob运行一个bash脚本来重新启动服务

首先。 我什么都不知道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 / startrestart 。 很多时候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 /或者你的系统中的任何地方加上前缀。