我想要一个可以检查并重启服务的1个班轮,例如Apache,如果它们处于非活动状态/死亡状态。
我想将它放在crontab中并每分钟运行一次以确保服务仍在运行。
答案 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,耐心等待!