2016-01-21 109 views
0

我想要一个可以检查和重新启动服务的班轮,如Apache处于非活动状态/死机状态。Cronjob检查并重新启动服务(如果死了)

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

+0

不要。使用监视工具(如'monit'或'supervisord'或'runit'或'systemd'或任何其他少数几个)。 –

+0

@EtanReisner systemd具有看门狗支持(如果alive-ping没有发送到systemd,则重新启动服务),但是如果check-service-alive-script失败,它不会重新启动服务:: https://lists.freedesktop.org/ archives/systemd-devel/2016-May/036683.html“这真的超出了systemd的范围,这是监测,我不确信在systemd中定制检查功能支持是否合适,这应该在systemd 真的。“ – guettli

+0

@guettli有趣。这似乎是一个非常小的头发要分裂给我,但。 –

回答

0

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

显然这假设你有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 
+1

'/ etc/init.d /'迟早会消失。 – guettli

0

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

'/ etc/init.d /'迟早会消失。 – guettli

+0

这是真的,但是目前'systemd'将'init.d'映射到它的服务非常好,直到它完全替代'sysv','init.d''''''''' stop'脚本将会并且应该生存和发展。 –

+0

@NarūnasK应该在有限的生命周期内生存并茁壮成长,直到不再支持折旧模式/路径/方法。另外,有这样的:'something.service不是本地服务,重定向到systemd-sysv-install'。从技术上讲,虽然它的熟悉和落后compat,它在现代安装混淆和碎片化 - 没有symlinked以systemd方式,不显示在正确的列表/地方等。顺便说一句,你不需要这个脚本/ cron在所有如果你使用systemd内置的自动重启能力:'Restart = always'应该可以在几乎所有的发行版上从这里开始使用。 – dhaupin

1

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

相关问题