Cronjob检查并重新启动服务(如果死了)
我想要一个可以检查和重新启动服务的班轮,如Apache处于非活动状态/死机状态。Cronjob检查并重新启动服务(如果死了)
我想把它放在crontab中并每分钟运行一次以确保服务仍在运行。
如果将其保存为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
'/ etc/init.d /'迟早会消失。 – guettli
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
'/ etc/init.d /'迟早会消失。 – guettli
这是真的,但是目前'systemd'将'init.d'映射到它的服务非常好,直到它完全替代'sysv','init.d''''''''' stop'脚本将会并且应该生存和发展。 –
@NarūnasK应该在有限的生命周期内生存并茁壮成长,直到不再支持折旧模式/路径/方法。另外,有这样的:'something.service不是本地服务,重定向到systemd-sysv-install'。从技术上讲,虽然它的熟悉和落后compat,它在现代安装混淆和碎片化 - 没有symlinked以systemd方式,不显示在正确的列表/地方等。顺便说一句,你不需要这个脚本/ cron在所有如果你使用systemd内置的自动重启能力:'Restart = always'应该可以在几乎所有的发行版上从这里开始使用。 – dhaupin
对于这种情况,您可以使用专用软件monit
。它可以检查你的守护进程,如果需要的话重启它并发送警报。另一个不错的选择 - 它可以停止尝试在N失败后重新启动服务(例如,如果服务无法启动)。
不要。使用监视工具(如'monit'或'supervisord'或'runit'或'systemd'或任何其他少数几个)。 –
@EtanReisner systemd具有看门狗支持(如果alive-ping没有发送到systemd,则重新启动服务),但是如果check-service-alive-script失败,它不会重新启动服务:: https://lists.freedesktop.org/ archives/systemd-devel/2016-May/036683.html“这真的超出了systemd的范围,这是监测,我不确信在systemd中定制检查功能支持是否合适,这应该在systemd 真的。“ – guettli
@guettli有趣。这似乎是一个非常小的头发要分裂给我,但。 –