我想寫一些東西,當我的 apache 伺服器死掉時重新啟動 httpd 服務
我是一個中型烹飪部落格的不情願“系統管理員”,該部落格在 t2.small EC2 實例上執行,並在 LAMP 堆棧上使用 WordPress。儘管是一個相當令人尷尬的糟糕“系統管理員”,但它實際上執行非常可靠和高效,儘管傳輸了大量的流量。我已經盡我所能,但時不時地(大約每年一次)有人設法用 DDOS 類型的攻擊來敲打它。往往會發生 apache 伺服器當機,並且任何從網站請求任何內容的人都會收到 HTTP 超時。重新啟動 httpd 服務會立即解決問題。
我想做的是安排一個 CRON 作業每隔 5 分鐘呼叫一次網站,如果它發現超時兩次以上,它會重新啟動 httpd 服務並向我發送一封電子郵件。現在,這不是“我無法正確設置我的 apache 伺服器,所以我會每小時重新啟動它”的解決方案之一。Apache 進行了調整,並且在沒有被黑客入侵時執行良好。我已經盡可能多地採用了防火牆反黑客最佳實踐。我的理由基本上是“黑客和瘋子總是在尋找新的方法來打擊我,當他們這樣做時,我寧願有 10 分鐘的中斷和一封電子郵件,而不是可能的幾個小時的停機時間(如果我睡著了或不在的話)”。問題是,這是一個好的解決方案,還是有更好、更系統的方法來使用一些現有技術來做到這一點?
注意:當我說 apache 伺服器死掉時,實際上執行 top -U apache 時看起來還不錯。它的作用是寫大約 10
(12)Cannot allocate memory: AH00159: fork: Unable to fork new process
到 error_log 並且在重新啟動之前根本不做任何事情。
您可以通過檢查命令的返回碼輕鬆做到這一點
curl
:#!/bin/bash # Request website (timeout five seconds) /usr/bin/curl -m5 $1 > /dev/null RC=$? if [ $RC -ne 0 ]; then echo Website: $1 not running, restarting apache. Curl RC: $RC /usr/sbin/service httpd restart fi
構想是如果返回碼不等於0,即請求失敗,則重啟apache。
您可以將它放在 cron 中,如下所示:
*/5 * * * * /path/to/check_site.sh website.url.com >> /path/to/log/file.log 2>&1
這將確保它正在記錄結果。
注意:這是一個創可貼。繼續並確保它不會重複執行是個好主意。也許放在一條
send me an email
線上?