2015-10-15 53 views
-1

我需要編寫一個shell腳本來查看ADM進程是否關閉,我們需要通過電子郵件得到警報,我已經在腳本下面做了這些,如果我們已經安裝了一個ADM服務器在一臺機器上,但我的要求是我已經在一臺機器上安裝了3個ADM服務器,不知道如何編寫shell腳本來達到這個要求。在邏輯中被觸發

腳本: -

export ADM =`ps -ef | grep Adm | grep -v grep | wc -l` 

if [ $ADM == 0 ]; 
then 
echo "AdmServer is down on Dev $hostname" | mail -s xxxx.gmail.com 
fi 

請幫我,

感謝,

+1

變量賦值在'='周圍不能有空格。 – Barmar

+0

你爲什麼使用'export'?是否有使用ADM變量的子進程? – Barmar

+0

如果我明白正確地更改'if if [$ ADM == 0];'to'if [$ ADM!= 3];'會起作用 – knightrider

回答

0

而不是檢查是否$ADM0的,檢查它是否是不3

ADM=`ps -ef | grep -c '[A]dm` 

if [ $ADM -ne 3 ] 
then 
    echo "AdmServer is down on Dev $hostname" | mail -s xxxx.gmail.com 
fi 

-c選項grep返回匹配的數量,因此你不需要使用wc -l。並且將其中一個字符放在括號中是解析ps輸出的技巧,因此您不需要grep -v grep(因爲現在grep的參數不再與您正在搜索的進程名稱相同)。你應該使用-eq-ne來比較數字; ==!=用於比較字符串。

當分配一個只在該shell腳本中使用的變量時,不需要使用exportexport用於創建子進程繼承的環境變量。

+0

對不起,先生是我的錯,我忽略了 –

+0

我這樣做的原因是 export ADM ='ps -ef | grep Adm | grep -v grep | wc -l' 它會給計數與執行邏輯 –

+0

該計數我明白你爲什麼分配變量。我的問題是爲什麼你**出口**。你知道shell變量和環境變量之間的區別,不是嗎? – Barmar