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

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

首先。我对 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/startrestart。cron 使用 时经常会出现问题service。您还必须以运行于用户 Supervisord 的身份创建 cron,或者通过 以 root 身份创建 cron 。sudo crontab -e此外,在 cron 中始终使用完整路径,因此不要使用/supervisord_restart.shbut/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/ 或系统上的任何位置。

相关内容