【Shell程式設計】檢測Nginx服務是否正常執行(詳解)
大家好今天給大家帶來shell指令碼的一個例項(檢測Nginx服務是否正常執行)
需求:檢測Nginx服務是否正常的執行,如果不在執行那麼就啟動Nginx伺服器,那麼如果啟動Nginx失敗,那麼通過郵件報警的方式通知我們;
一、分析
1:監測Nginx服務是否正在執行如下:
[[email protected] ~]# 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/nginx
3:如果啟動失敗,那麼就通過郵件報警的方式通知
怎麼樣可以判斷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(){ #定義了監測本地URL函式
wget --spider -q -o /dev/null --tries=1 -T 5 http://localhost #安靜的輸出---/dev/null 這裡的wget引數不解釋
if [ "$?" -ne 0 ] #如果以上wget獲取本地的url不等於0 也就是不成功
then #那麼
action "Nginx pages cannot be obtained_$DA" /bin/false >> /var/log/nginx_url_error.log
#輸出一條NginxURL檢測失敗,那麼後面呼叫DA時間變數輸出到/var/log/nginx_url_error.log日誌中
fi #最後fi結束if語句
}
那麼我們在這裡想一個問題,那麼如果wget獲取不到本地的URL 意味著Nginx可能會宕機,那麼我們繼續寫檢測Nginx是否執行的函式
function main(){ #定義總函式
Nginx_URL #呼叫NGinxurl函式來測試nginx本地的url是否能夠正常執行
Nginx_server #呼叫檢測nginx函式 來測試nginx伺服器是否正在執行
}
main #最後結束main函式
function Nginx_server(){ #定義檢測Nginx函式
if [ "$NGX" -ne 0 ] #$NGX這個變數的執行結果不等於0 非0代表正在執行
then #那麼
echo -en "${RED_COLOR} Nginx is running!\n${RES}" #就輸出Nginx is running 資訊;
else #否則啟動NGINX
/usr/local/nginx/sbin/nginx
fi
if [ "$?" -ne 0 ];then 注意:在這裡需要提前安裝好sendemail郵件報警 可以參考我之前的文章這裡不在演示
/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
}
最後我們定義了兩個函式同時檢測Nginx的狀態情況,最後我們需要定義總函式來呼叫以上函式進行最後的測試
function main(){ #定義總函式
Nginx_URL #呼叫NGinxurl函式來測試nginx本地的url是否能夠正常執行
Nginx_server #呼叫檢測nginx函式 來測試nginx伺服器是否正在執行
}
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(){
wget --spider -q -o /dev/null --tries=1 -T 5 http://localhost
if [ "$?" -ne 0 ]
then
action "Nginx pages cannot be obtained_$DA" /bin/false >> /var/log/nginx_url_error.log
fi
}
function Nginx_server(){
if [ "$NGX" -ne 0 ]
then
echo -en "${RED_COLOR} Nginx is running!\n${RES}"
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(){
Nginx_URL
Nginx_server
}
main
執行測試如下:
當我們Nginx正在執行的時候我們發現它輸出了Nginx is running 說明我們定義函式生效了。
2:那我們把Nginx關閉在執行指令碼測試如下:
3:模仿/usr/local/nginx/sbin/nginx啟動出錯 測試郵件是否傳送.....
郵件查收:
最後我們要把此指令碼新增到計劃任務執行,在這裡不在做演示! 上面的Nginx啟動報錯大家可以自己想辦法讓它啟動失敗,這裡不在做演示。
希望對您有所幫助,再見~
相關推薦
【Shell程式設計】檢測Nginx服務是否正常執行(詳解)
大家好今天給大家帶來shell指令碼的一個例項(檢測Nginx服務是否正常執行) 需求:檢測Nginx服務是否正常的執行,如果不在執行那麼就啟動Nginx伺服器,那麼如果啟動Nginx失敗,那麼通過郵
【併發程式設計】CPU cache結構和快取一致性(MESI協議)
一、cache cpu cache已經發展到了三級快取結構,基本上現在買的個人電腦都是L3結構。 1. cache的意義 為什麼需要CPU cache?因為CPU的頻率太快了,快到主存跟不上,這樣在處理器時鐘週期內,CPU常常需要等待主存,浪費資源。所以cac
android開發學習 ------- 【轉】 android中的單例模式 (詳解)
lan post tail -- and 使用 href details android開發 https://blog.csdn.net/u011418943/article/details/60139644 這篇文章 前因後果 都說出來了 ,值得學習。 htt
【shell程式設計】 nginx 服務的啟動指令碼
#!/bin/bash # # nginx This shell script takes care of starting and stopping # standalone nginx. # config: /usr/local/ngi
大資料----【Shell程式設計】
Shell程式設計 Shell 是一個用 C 語言編寫的程式,通過 Shell 使用者可以訪問作業系統核心服務。它類似於 DOS 下的 command 和後來的 cmd.exe。Shell 既是一種命令語言,又是一種程式設計語言。Shell script 是一種
4、【Shell 程式設計】分支、迴圈
一、分支 1、if if語句的語法格式: if condition then command1 command2 ... commandN fi 寫成一行(適用於終端命令提示符): if [ $(ps -ef | grep -c "s
6、【Shell 程式設計】輸入/輸出重定向
大多數 UNIX 系統命令從你的終端接受輸入並將所產生的輸出傳送回到您的終端。一個命令通常從一個叫標準輸入的地方讀取輸入,預設情況下,這恰好是你的終端。同樣,一個命令通常將其輸出寫入到標準輸出,預設情況下,這也是你的終端。 重定向命令列表如下: 命令
【Shell程式設計】變數詳解
一、什麼是變數 在我們上學時,我們就接觸資料方程式;例如:已知x=1 y=x+1 那麼y等於多少,我們毫不猶豫的會算出來2,但是在shell中x就是變數名,那麼對應的1就是變數值,在這裡的等於號,在shell中稱為賦值! x=1 x(變數名) =(賦值)
【Shell程式設計】變數數值計算(二)
OK,數值運算(上)是我看完的一小部分,大概的結束指令碼如下:(回顧~~) #!/bin/bash a=$1 b=$2 expr $1 + 1 &>/dev/null if [ "$
【shell程式設計】for迴圈、while迴圈、break跳出迴圈、continue結束本次迴圈和exit退出整個指令碼
一、for迴圈 語法:for 變數名 in 條件; do …; done 案例1: #!/bin/bash sum=0 for i in `seq 1 100` do sum=$[$sum+$i] echo $i done echo $sum 案
【小程序】用nginx進行反向代理處理(windows)
TP 代理 targe 反向 todo nginx安裝 http cnblogs smi 在通過json-server搭建本地服務器得到 http://localhost:3000/todos 的基礎上,要想將接口改為www.test.com/todos這樣的形式 ,
【搞定Java併發程式設計】第7篇:Java記憶體模型詳解
上一篇:ThreadLocal詳解:https://blog.csdn.net/pcwl1206/article/details/84859661 其實在Java虛擬機器的學習中,我們或多或少都已經接觸過了有關Java記憶體模型的相關概念(點選檢視),只不過在Java虛擬機器中講的不夠詳細,因此
【搞定Java併發程式設計】第23篇:Fork/Join 框架詳解
上一篇:Java中的阻塞佇列 BlockingQueue 詳解 本文目錄: 1、什麼是 Fork/Join 框架 2、工作竊取演算法 3、Fork/Join 框架的設計 4、使用 Fork/Join 框架 5、Fork/Join 框架的異常處理 6、Frok/
【java程式設計】java打包雙擊直接執行設定
目的: 讓java在windows上直接雙擊就可以執行。 設定流程: 1.在打包java檔案時,用上-d引數,如:javac -d 目的地資料夾 java檔案 2.建立一個配置資訊檔案,名稱自定,裡面的格式是: Main-Class:[空格]包名稱.主類名稱[最後加回車]
02-keepalived實現對nginx服務的高可用(主備)
trac code lob back ddr then 密碼 rtu alt 實驗環境:controller3,controller4為後端web服務器,controller1,controller2為nginx負載均衡服務器,用keepalived實現主備模式的高可用 c
【重點突破】——第三方繪圖工具FusionCharts.js的使用詳解
統計圖表 使用詳解 body 選擇 ons sessions chart 項目組 線圖 一、引言 項目組中,經常會因為繪制圖表的繁雜度,衡量會不會使用第三方繪圖工具,如果自己做很困難,成本使用高於第三方繪圖工具庫,就會使用。很多人使用的是Chart.js,因為它是免費使用的
【紫書】例題3-3 回文詞(Palindromes, UVa401)
jpg 多余 lin main 表示 pri 十分 span clas 【題目描述】 輸入一個字符串,判斷它是否為回文串以及鏡像串。輸入字符串保證不含數字0.所謂回文串,就是反轉以後和原串相同,如abba和madam。所有鏡像串,就是左右鏡像之後和原串相同,如2S和3AIA
Nginx服務簡介及編譯安裝詳解
nginx簡介 nginx編譯安裝步驟詳解 編寫Nginx啟動文件 Nginx服務簡介及編譯安裝詳解一、Nginx簡介 Nginx是一個自由、開源、高性能及輕量級的HTTP服務器及反向代理服務器,其性能與IMAP/POP3代理服務器相當。Nginx以其高性能、穩定、功能豐富、配置簡單及占用系
【爬蟲工具】嗶哩嗶哩外掛姬(bilibili-plugin)
完整原文(含原始碼):http://exp-blog.com/2018/09/09/pid-2223/ (轉載請註明出處,僅供分享學習,嚴禁用於商業用途) 宣告 寫這個外掛純粹是出於學習目的,此博文主要作用是功能展示 之後會圍繞這個外掛,寫一個系
【穩定方案】賽英THC63LVD827:RGB轉LVDS(雙通道)晶片規格書
General Description The THC63LVD827 transmitter is designed to supportpixel data transmission between Host and Flat PanelDisplay and Dual Link tra