1. 程式人生 > >【Shell程式設計】檢測Nginx服務是否正常執行(詳解)

【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