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

Use*_*ser 2 linux bash centos crontab

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

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

M1G*_*GEO 14

抱歉唤醒了正在睡觉的线程,但由于许多答案不再有效,而且我在查找时发现了此页面,我想我应该在这里添加我的解决方案:

创建脚本check_service.shSERVICENAME根据需要进行设置:

#!/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
Run Code Online (Sandbox Code Playgroud)

使脚本可执行:

chmod +x check_service.sh
Run Code Online (Sandbox Code Playgroud)

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

# min   hour    day month   dow cmd
*/1 *   *   *   *   /full/path/to/check_service.sh
Run Code Online (Sandbox Code Playgroud)

保存crontab,耐心等待!


Nar*_*asK 5

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
Run Code Online (Sandbox Code Playgroud)

更改文件权限:

chmod +x service_ck.sh
Run Code Online (Sandbox Code Playgroud)

更新您的 crontab:

# min   hour    day month   dow cmd
*/1 *   *   *   *   /path/to/service_ck.sh
Run Code Online (Sandbox Code Playgroud)


mmc*_*aff 1

如果您将其保存为 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
Run Code Online (Sandbox Code Playgroud)