Cronjob检查并重新启动服务,如果死了

时间:2016-01-21 18:44:44

标签: linux bash centos crontab

我想要一个可以检查并重启服务的1个班轮,例如Apache,如果它们处于非活动状态/死亡状态。

我想将它放在crontab中并每分钟运行一次以确保服务仍在运行。

4 个答案:

答案 0 :(得分:1)

service_ck.sh

#!/bin/bash
STATUS=$(/etc/init.d/service_name status)
# Most services will return something like "OK" if they are in fact "OK"
test "$STATUS" = "expected_value" || /etc/init.d/service_name restart

更改文件权限:

chmod +x service_ck.sh

更新您的crontab:

# min   hour    day month   dow cmd
*/1 *   *   *   *   /path/to/service_ck.sh

答案 1 :(得分:1)

在这种情况下,您可以使用monit等特殊软件。它可以检查您的守护进程,如果需要重新启动它并向您发送警报。另一个不错的选择 - 它可以停止尝试在N失败后重新启动服务(例如,如果服务无法启动)。

答案 2 :(得分:0)

如果将其保存为bash脚本,它将是一个可以从cron调用的单行程序。如果Apache不在pgrep返回的进程列表中,这将重启Apache。

显然这假设你有pgrep。调整命令以相应地重新启动。

如果Apache正在运行但没有响应,那就是另一个问题。您必须检查某个端点是否在指定的超时内响应(并正确响应)等等。

#!/bin/bash

RESTART="/etc/init.d/httpd restart"
PGREP="/usr/bin/pgrep"
HTTPD="httpd"

$PGREP ${HTTPD}

if [ $? -ne 0 ] # if apache not running 
then
 # restart apache
 $RESTART
fi

答案 3 :(得分:0)

很抱歉唤醒睡眠线程,但是由于许多答案不再起作用,因此我在查找时找到了此页面,我想在这里添加解决方案:

创建脚本check_service.sh并根据需要设置SERVICENAME

#!/bin/bash

SERVICENAME="WHATEVER_SERVICE_YOU_WANT"

systemctl is-active --quiet $SERVICENAME
STATUS=$? # return value is 0 if running

if [[ "$STATUS" -ne "0" ]]; then
        echo "Service '$SERVICENAME' is not curently running... Starting now..."
        service $SERVICENAME start
fi

使脚本可执行:

chmod +x check_service.sh

最后,通过运行sudo crontab -e将脚本添加到Root的crontab中:

# min   hour    day month   dow cmd
*/1 *   *   *   *   /full/path/to/check_service.sh

保存crontab,耐心等待!