分享實用監控指令碼:使用Shell檢查程式是否存在

安全劍客發表於2019-09-26
在運維工作中,為保證業務的正常執行,我們需要定時檢視指定的程式是否還存在,一旦程式退出了,說明服務可能存在問題,運維工程師就可以在第一時間處理問題。

在運維工作中,為保證業務的正常執行,我們需要定時檢視指定的程式是否還存在,一旦程式退出了,說明服務可能存在問題,運維工程師就可以在第一時間處理問題。今天就跟大家分享一個實用的 ——時刻檢查你的程式狀態。
分享實用監控指令碼:使用Shell檢查程式是否存在分享實用監控指令碼:使用Shell檢查程式是否存在

在對程式進行監控時,我們一般需要得到該程式的 ID,程式 ID 是程式的唯一標識,但是有時可能在伺服器上不同使用者下執行著多個相同程式名的程式。

下面的函式 GetPID 給出了獲取指定使用者下指定程式名的程式 ID 功能(目前只考慮這個使用者下啟動一個此程式名的程式),它有兩個引數為使用者名稱和程式名,它首先使用 ps 查詢程式資訊,同時透過 grep 過濾出需要的程式,最後透過 sed 和 awk 查詢需要程式的 ID 值(此函式可根據實際情況修改,比如需要過濾其它資訊等)。

對程式進行監控

function GetPID #User #Name  
 {  
 PsUser=$1  
 PsName=$2  
 pid=`ps -u $PsUser|grep $PsName|grep -v grep|grep -v vi|grep -v dbx\n  
 |grep -v tail|grep -v start|grep -v stop |sed -n 1p |awk '{print $1}'`  
 echo $pid  
 } 
<、pre>
示例演示:
1. 源程式(例如查詢使用者為 root,程式名為 TestApp 的程式 ID)
PID=`GetPID root TestApp`    
 echo $PID
2. 結果輸出
11426  
 [dyu@xilinuxbldsrv shell]$
3. 結果分析

從上面的輸出可見:11426 為 root 使用者下的 TestApp 程式的程式 ID。

4.  詳解

(1)ps: 檢視系統中瞬間程式資訊。 引數:

-u< 使用者識別碼 > 列出屬於該使用者的程式的狀況,也可使用使用者名稱稱來指定
-p< 程式識別碼 > 指定程式識別碼,並列出該程式的狀況
-o 指定輸出格式
(2)grep: 用於查詢檔案中符合字串的當前行。 引數:

-v 反向選擇,亦即顯示出沒有 ‘搜尋字串’ 內容的那一行
(3)sed: 一個非互動性文字編輯器,它編輯檔案或標準輸入匯出的檔案,一次只能處理一行內容。 引數:

-n 讀取下一個輸入行,用下一個 處理新的行而不是用第一個命令
p 標誌 列印匹配行
(4)awk:一種程式語言,用於在 linux/unix 下對文字和資料進行處理。除了在命令列中使用,它更多是作為 來使用。 引數:

-F fs or –field-separator fs :指定輸入檔案折分隔符,fs 是一個字串或者是一個正規表示式,如 -F:。
PS:有時有可能程式沒有啟動,下面的功能是檢查程式 ID 是否存在,如果此程式沒有執行輸出:

The process does not exist.  
 # 檢查程式是否存在 
 if [ "-$PID" == "-" ]  
 then  
 {  
 echo "The process does not exist." 
 }  
 fi

原文地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2658441/,如需轉載,請註明出處,否則將追究法律責任。

相關文章