Apache之HTTP網站智能監控腳本

原創:Apache之HTTP網站智能監控腳本

 本站原創 [基於 署名-非商業使用-相同方式分享 2.5 協議,轉載須註明鏈接] 

本文提供的腳本已經被管理員用於Debian生產環境並運行正常 

在某些64位的Linux系統中,Apache進程可能存在內存泄露、CPU死鎖等情況,導致httpd或php5-cgi進程佔用100%的CPU,並且無法自動釋放。這個腳本將直接監控Apache/網站/HTTP服務的可用性,並且根據情況自動採取不同的操作,如強行自動重啓Apache、在重啓Apache依然無法解決的情況下自動重啓服務器等等。

完整腳本如下。如需複製,請使用右側浮動工具欄的“複製”按鈕。

01#!/bin/bash
02
03# 本腳本由VPS管理百科編寫
04# 訪問:http://WWW.BOOTF.COM 獲取技術支持
05
06URL="http://127.0.0.1/"
07curlit()
08{
09curl --connect-timeout 15 --max-time20 --head--silent "$URL"grep'200'
10}
11
12doit()
13{
14if! curlit; then
15sleep20
16top-n 1 -b >> /var/log/apachemonitor.log
17/usr/bin/killall -9 apache2 && /usr/bin/killall -9 php5-cgi && /usr/bin/killall -9 httpd && /usr/bin/killall -9 http && /usr/bin/killall -9 apache && /usr/bin/killall -9 php-cgi > /dev/null
18sleep2
19/etc/init.d/apache2 start > /dev/null
20/etc/init.d/httpd start > /dev/null
21echo$(date"Apache Restart">> /var/log/apachemonitor.log
22sleep30
23if! curlit; then
24echo$(date"Failed! Now Reboot Computer!">> /var/log/apachemonitor.log
25reboot
26fi
27sleep180
28fi
29}
30
31sleep300
32whiletruedo
33doit > /dev/null
34sleep10
35done

功能解釋:

腳本將在啓動後等待5分鐘(防止腳本已經啓動了,但Apache還沒啓動完畢,造成誤判),然後每隔10秒,對本地http://127.0.0.1進行測試,如果正常返回200代碼,則不進行任何操作;如果超過15秒仍然沒有響應,或相應錯誤代碼,則:

1、將top命令所得結果保存至 /var/log/apachemonitor.log 文件,用於分析故障原因;

2、無條件kill掉所有的apache/apache2/httpd/http/php-cgi/php5-cgi進程,不管是否存在;

3、啓動Apache(爲了兼容性考慮,同時嘗試啓動/etc/init.d/下的httpd與apache2)

4、記錄Apache Restart 與當前時間至 /var/log/apachemonitor.log 日誌中;

5、等待30S,如果網站正常訪問了,則不進行任何操作,開始下個循環檢測;如果訪問仍然不正常,則將“Failed”寫入日誌,並執行reboot重啓Linux。

使用方法:

將此腳本加入到rc.local自動啓動即可。

本腳本使用了curl來獲取網站狀態,因此需要預先在Linux中安裝好curl(一般都有)。

優缺點:

如果Apache本身出嚴重錯誤了,可能導致服務器不停重啓(當然你可以把重啓的那行刪掉)

採用curl直接獲取HTTP狀態碼,而不是監控內部進程,因此準確權威,能反映網站的實際狀態。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章