M1G*_*GEO 14
抱歉唤醒了正在睡觉的线程,但由于许多答案不再有效,而且我在查找时发现了此页面,我想我应该在这里添加我的解决方案:
创建脚本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
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,耐心等待!
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)
如果您将其保存为 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)