需求:檢測nginx服務是否正常的執行,如果不在執行那麼就啟動nginx伺服器,那麼如果啟動nginx失敗,那麼通過郵件報警的方式通知我們;
一、分析
1:監測nginx服務是否正在執行如下:
[root@yankerp ~]# netstat -anput | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* listen 27228/nginx: master
使用以上這條命令能夠很清楚的看到nginx正在執行2:啟動nginx伺服器,我們可以通過它的絕對路徑去啟動nginx 我的nginx安裝路徑為:/usr/local/nginx其中/sbin/下就是nginx的啟動項;/usr/local/nginx/sbin/nginx3:如果啟動失敗,那麼就通過郵件報警的方式通知怎麼樣可以判斷nginx啟動失敗,我們可以使用特殊的狀態變數$? 如果/usr/local/nginx/sbin/nginx 這條命令執行之後如果啟動失敗那麼它$?就會輸出非0的數值表示失敗,那麼至於郵件報警的方式這裡我採用了sendemail
二、編寫指令碼
開頭注釋:
#!/bin/bash一句話代表著此指令碼中的內容是通過bash解析器來執行的
#!/bin/bash
#date: 17:17 2018-03-04
#author: yankai
#email: [email protected]
#function: nginx monitoring
#version: 3.1
2)定義變數
. /etc/init.d/functions #載入函式庫,後面會用到
red_color='\e[1;31m' #定義顏色(紅色變數)輸出更美觀
res='\e[0m' #同上
ngx=`netstat -anput | grep nginx | wc -l` #定義檢測nginx是否執行變數 通過wc命令獲取行號
da=`date +%y-%m-%d` #標準的時間輸出後面會用到
3)定義函式接下來就開始寫第乙個函式了,首先我們寫乙個獲取本機的url看看是否能夠成功http://localhost
function nginx_url()
那麼我們在這裡想乙個問題,那麼如果wget獲取不到本地的url 意味著nginx可能會宕機,那麼我們繼續寫檢測nginx是否執行的函式
function main()
main #最後結束main函式
function nginx_server() nginx is running!\n$" #就輸出nginx is running 資訊;
else #否則啟動nginx
/usr/local/nginx/sbin/nginx
fi /usr/local/bin/sendemail -f [email protected] -t [email protected] -s smtp.163.com -u "nginx alarm" -o message-content-type=html -o message-charset-utf8 -xu yankerpcs -xp 123456yk -m "nginx has serious downtime" &>/dev/nullfi}
最後我們定義了兩個函式同時檢測nginx的狀態情況,最後我們需要定義總函式來呼叫以上函式進行最後的測試
function main()
main #最後結束main函式。
三、結尾:經過了上面的幾種操作,我們已經知道了nginx的各種判斷來確定nginx的執行狀況,同時我們也設定了郵件報警的機制來傳送報警訊息給運維人員。那麼最後的指令碼如下:
#!/bin/bash
#date: 17:17 2018-03-04
#author: yankai
#email: [email protected]
#function: nginx monitoring
#version: 3.1
. /etc/init.d/functions
red_color='\e[1;31m'
res='\e[0m'
ngx=`netstat -anput | grep nginx | wc -l`
da=`date +%y-%m-%d`
function nginx_url()
function nginx_server() nginx is running!\n$"
else
/usr/local/nginx/sbin/nginx
fi if [ "$?" -ne 0 ];then
/usr/local/bin/sendemail -f [email protected] -t [email protected] -s smtp.163.com -u "nginx alarm" -o message-content-type=html -o message-charset-utf8 -xu yankerpcs -xp 123456yk -m "nginx has serious downtime" &>/dev/null
fi}function main()
main
執行測試如下:
當我們nginx正在執行的時候我們發現它輸出了nginx is running
說明我們定義函式生效了。
2:那我們把nginx關閉在執行指令碼測試如下:
3:模仿
/usr/local/nginx/sbin/nginx
啟動出錯 測試郵件是否傳送.....
郵件查收:
最後我們要把此指令碼新增到計畫任務執行,在這裡不在做演示! 上面的nginx啟動報錯大家可以自己想辦法讓它啟動失敗,這裡不在做演示。
希望對您有所幫助,再見~
檢測lamp各項服務是否正常開啟和執行的命令
看到 active active running 就說明執行正常。否則開啟apache服務 systemctl enable httpd systemctl start httpd 開啟服務,並設定開機啟動 ps ef grep php 看到root 4411 3967 0 22 30 pts 1 ...
監測服務是否正常執行指令碼
10 cd home work pay data load bash check running status.sh check running status.sh 用於檢查pay data load是否正常執行的指令碼 current path cd dirname 0 pwd 檢查當前執行時間的...
mysql和nginx服務是否正常監控指令碼
一 監控web伺服器和 mysql 方法 1.監控埠 nginx也相同 1.1本地監控 netstat tunlp grep 3306 wc l ss tunlp grep 3306 wc l 1.2遠端監控 nmap 10.117.33.98 p 3306 grep open wc l echo ...