2016-01-21 26 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失敗後重新啓動服務(例如,如果服務無法啓動)。

相關問題