2014-01-30 37 views
0

我遇到了一個問題,當我嘗試將我的bash腳本移植到nagios時。腳本正常工作時,我在控制檯上運行,但是當我從Nagios運行它時,我得到msg「(null)」 - 在Nagios的調試日誌我看到它解析劇本很好,但它返回的錯誤味精..Nagios插件不工作

我不是很擅長腳本所以我想我會需要一些幫助

的目標該腳本將檢查某些服務器的* .ears版本,並對它們進行md5比較,以​​查看該版本是否匹配。 要做到這一點,我有這些服務器上的JSON打印* .ear和他的MD5的名稱。

so ..腳本的第一部分從curl獲取該信息,並將.dm5號碼存儲在.temp文件中,然後比較兩個臨時文件,如果它們匹配,則獲得$ STATE_OK消息。如果他們不這樣做,它會創建一個包含日期的.datetmp文件(目標是在不一致48小時後打印一條消息)。然後,我對.datetmp文件進行比較,如果結果小於48小時,則打印出$ STATE_WAR,如果結果超過48小時,則打印$ STATE_CRI

sintaxis劇本是「$ SH script.sh nameoftheear.ear server1的服務器2」

在此先感謝

#/bin/bash 

#Variables For Nagios 
cont=$1 
bas1=$2 
bas2=$3 

## Here you set the servers hostname 
svr1= curl -s "http://$bas1.domain.com:7877/apps.json" | grep -Po '"EAR File":.*? [^\\]",' | grep $cont | awk '{ print $5 }' > .$cont-tmpsvr1 
svr2= curl -s "http://$bas2.domain.com:7877/apps.json" | grep -Po '"EAR File":.*? [^\\]",' | grep $cont | awk '{ print $5 }' > .$cont-tmpsvr2 
file1=.$cont-tmpsvr1 
file2=.$cont-tmpsvr2 
md51=$(head -n 1 .$cont-tmpsvr1) 
md52=$(head -n 1 .$cont-tmpsvr2) 
datenow=$(date +%s) 

#Error Msg 
ERR_WAR="Not updated $bas1: $cont $md51 --- $bas2: $cont $md52 " 
ERR_CRI="48 hs un-updated $bas1: $cont $md51 --- $bas2: $cont $md52 " 
OK_MSG="Is up to date $bas1: $cont $md51 --- $bas2: $cont $md52 " 

STATE_OK=0 
STATE_WARNING=1 
STATE_CRITICAL=2 


##Matching md5 Files 
if cmp -s "$file1" "$file2" 
then 
    echo $STATE_OK 
    echo $OK_MSG 
# I do the rm to delete the date tmp file so i can get the $STATE_OK or $STATE_WARNING 
    rm .$cont-datetmp 
    exit 0 

elif 
    echo $datenow >> .$cont-datetmp 

#Vars to set modification date 

datetmp=$(head -n 1 .$cont-datetmp) 
diffdate=$((($datenow - $datetmp) /60)) 

#This var is to set the time of the critical ERR 

days=$((48*60)) 

[ $diffdate -lt $days ] 

then 
    echo $STATE_WARNING 
    echo $ERR_WAR 
    exit 1 
else 
    echo $STATE_CRITICAL 
    echo $ERR_CRI 
    exit 2 
fi 

回答

1

我猜測某種權限問題的 - 更具體地說,我不認爲Nagios的用戶可以寫到它自己的主目錄。您要麼修復這些權限,要麼寫入/ tmp中的文件(並考慮使用mktemp?)。 ...但理想情況下,您可以跳過所有這些文件,只要我可以看到所有這些比較等都可以保存在內存中。

UPDATE

在腳本再次看了看 - 我看到一些明顯的錯誤,你可以看看:

  • 您打印出退出值打印該消息之前。
  • 您輸出退出值而不是退出並顯示退出值。

...所以這一點:

echo $STATE_WARNING 
echo $ERR_WAR 
exit 1 

而應是:

echo $ERR_WAR 
exit $STATE_WARNING 

而且我想知道如果這是真的腳本,或者如果你錯過了一些東西時,粘貼。在最後一段代碼中似乎缺少'if'和多餘的換行符?而應是:

if [ $diffdate -lt $days ] 
then 
    ... 
else 
    ... 
fi 
+0

嗨,我已經檢查權限,我也修改腳本在TMP FIEL寫的,但問題依然存在,Nagios的pluging的警告顯示和輸出(空)它也創建臨時文件。我是這樣做的,因爲我需要設置這個插件來檢查很多服務器。 –

+0

我更新了我的評論!再試一次? :) – bryn

+0

感謝哥們,解決了我的問題! –