因爲工做須要 必須保證人家網站7X24小時不間斷運行因此寫了 下面這個小腳本java
其實如今一個網站有N多服務要監控的 好比我這個apache,tomcat.java等 亂七八糟的web
監控apache服務器的狀態 若是apache服務down了則自動啓動服務並郵件短信通知管理員 絕對實用 適用於監控大部分網絡服務 我這裏用的是139郵箱 發到郵箱就自動發到手機上了能夠換成其餘郵箱還想有發短信的功能的話 只能用語音網關了 shell
廢話很少說 先把腳本分享出來 可是使用此腳本的前提爲apache
得先把hosts文件在127.0.0.1後面加上一條a.b.com這條記錄 做爲發送郵件服務器的域名tomcat
而且服務器上裝有並啓用sendmail服務 你的手機也開通139郵箱了不然發不出來的bash
#!/bin/bash服務器
#檢測apache 服務狀態 若是關閉則重啓服務,記錄日誌並進行郵件短信告警網絡
#利用apache 的80來進行監測tcp
web=`netstat -ant | grep 80 | awk '{print $4}' | awk -F : '{print $4}'`ide
apachelog=/var/log/httpd/service.log
/sbin/service sendmail start
if [ $web = 80 ]
then
echo "httpd is running"
else
echo "the web service alredy restart"
echo "`date` the web service alredy restart" >> $apachelog
/etc/init.d/httpd start
sleep 2
echo `date` httpd aleady restart | /usr/sbin/sendmail -v your telephonenumber@139.com > /dev/null
fi
1. 先看看 web=`netstat -ant | grep 80 | awk '{print $4}' | awk -F : '{print $4}'` 這句什麼意思
輸入netstat –ant 先看下效果
[root@localhost ~]# netstat -ant | grep 80
tcp 0 0 :::80 :::* LISTEN能夠發現 apache 服務用的就是上面這一行的部分 我們要作的就是把這個80端口給取出來 這裏用到一個shell中經常使用的函數 awk 用法就是
awk -F # ‘{print $4}’ 其實awk就是取值用的 –F 指定按什麼來分來字符串 不指定默認爲空格 ‘{print $4}’就是把取到的第四個數值輸出 這裏須要注意print用的是單引號不是反撇號 具體看下這裏怎麼用的
這裏我沒有指定分隔符默認爲 空格 $4就是取第四個 你能夠按空格來分割數下
[root@localhost ~]# netstat -ant | grep 80 | awk '{print $4}'
:::80
一樣的到底 把:做爲分隔符 取到第4個就行
[root@localhost ~]# netstat -ant | grep 80 | awk '{print $4}' | awk -F : '{print $4}'
80
OK 到這裏端口就取出來 看起來是麻煩點 作起來很快的
2 選擇一個地方作日誌收集 這個不用說了看本身狀況了 能夠指定不存在的空文件 可是目錄必須存在 這樣會自動在指定的地方建立的
apachelog=/var/log/httpd/service.log
3.判斷服務情況是否正常 若是down掉作啓動操做並日志記錄,郵件短信警告等
這裏先判斷端口數是否爲80 若是服務down掉 這個$web會爲空的 則判斷會不成立的 進行到else 部分
#判斷80端口是否正確
if [ $web = 80 ]
then
echo "httpd is running"
else
#先輸出一條信息告知如今是什麼狀況
echo "the web service alredy restart"
#將何時作什麼操做等信息輸出到指定的日誌文件內
echo "`date` the web service alredy restart" >> $apachelog
#執行重啓服務操做
/etc/init.d/httpd start
sleep 2
#發送郵件到指定郵箱
echo `date` httpd aleady restart | /usr/sbin/sendmail -v 你的手機號碼@139.com > /dev/null
#退出判斷
fi
OK 到這裏一個監控服務的腳本就能夠基本實現了
若是郵件收不到等問題的時候先執行下mailq 看下郵件隊列有沒有郵件 日誌記錄等 若是仍是不行 請嘗試重啓sendmail服務等 操做
此腳本使用於絕大部分服務的監控工做能夠很方便的作應急處理 倉促寫的 哪位有什麼須要加的功能歡迎提 關於 sendmail服務這塊 有的服務器可能關掉了 後面我會再說不用sendmail也能夠實現發送郵件功能的