2014-06-22 74 views
0

我正在處理一個自定義的Nagios腳本,它將監視cPanel以確保它正在運行並根據它從服務cpanel狀態的輸出中得到的狀態返回狀態。這是我有:如果else語句不正確的輸出

############################################################################## 
# Constants 

cpanelstate="running..." 

ALERT_OK="OK - cPanel is running" 
ALERT_CRITICAL="CRITICAL - cPanel is NOT running" 
############################################################################### 

cpanel=$(service cpanel status | head -1) 

if [ "$cpanel" = "$cpanelstate" ]; then 

     echo $ALERT_OK 
     exit 0 
else 
     echo $ALERT_CRITICAL 
     exit 2 

fi 

exit $exitstatus 

當我運行該腳本,這是輸出我得到:

[email protected] [/home/mvelez]# /usr/local/nagios/libexec/check_cpanel 
CRITICAL - cPanel is NOT running 

當我運行該腳本,的cPanel正在運行,但這樣的輸出我得到。事實上,不管cPanel的狀態報告如何,這都是輸出結果。當我註釋掉ELSE,ECHO和EXIT 2語句:

#else 
#  echo $ALERT_CRITICAL 
#  exit 2 

它還給空白輸出:

[email protected] [/home/mvelez]# /usr/local/nagios/libexec/check_cpanel 
[email protected] [/home/mvelez]# 

我不知道我沒有做什麼正確的,因爲我很新的bash腳本,並嘗試學習,因爲我一直沿。非常感謝您的高度幫助!

+1

從你的問題看來,你錯過了一些基本的調試步驟;例如,你沒有指出'$ cpanel' *的實際值是*,這表明你可能沒有嘗試打印出來看看? – ruakh

+0

謝謝你的回覆。 我認爲該語句的輸出將被髮送到if語句。 如果我添加回顯命令來打印出字符串,我怎麼才能把它扔到if語句中,這樣它可以被處理並給出正確的結束輸出? – mvelez83

+0

什麼shell正在執行你的腳本?什麼是你的腳本shebang行('#!/ bin/....')?如果沒有,你的殼是什麼?什麼'服務cpanel狀態'返回_interactively_?它是否可能向_stderr_報告(儘管在運行腳本時應該看到stderr輸出)? – mklement0

回答

1

下面的代碼應該可以工作,但是可能需要使用sudo來運行它,因爲'service'可能不適用於普通用戶。

#!/bin/bash 

############################################################################## 
# Constants 

cpanelstate="running" 

ALERT_OK="OK - cPanel is running" 
ALERT_CRITICAL="CRITICAL - cPanel is NOT running" 
############################################################################### 

cpanel=$(service apache2 status | head -1) 
echo CPANEL $cpanel 
if [[ $cpanel == *$cpanelstate* ]]; then 

     echo $ALERT_OK 
     exit 0 
else 
     echo $ALERT_CRITICAL 
     exit 2 

fi 
+0

是的,這工作!這是我得到的輸出: 根@ shared01 [/家庭/ mvelez]# 在/ usr /本地/ Nagios的/的libexec/check_cpanel CPANEL cpsrvd(PID 10066)正在運行... OK - 的cPanel運行 我停了下來,然後重新運行它,這是我得到了什麼: 根@ shared01 [/家庭/ mvelez]# 在/ usr /本地/ Nagios的/的libexec/check_cpanel CPANEL cpsrvd停止 OK - 的cPanel運行 它應該踢出一個關鍵 - cPanel沒有運行,但它沒有。 – mvelez83

+0

它看起來像我的'服務'命令有一個不同的輸出比較你的。我會盡快更新答案。 –

+0

我剛剛更新了答案,以包含您的具體內容。一探究竟。 –

0

@Oleg Gryb's answer解決您的問題,但至於爲什麼你原來的劇本沒有工作:

[ "$cpanel" = "$cpanelstate" ]相比命令的輸出 - 例如,cpsrvd (pid 10066) is running...,與預期輸出的running...等於,這顯然會失敗。

的解決方案是使用bash的模式匹配,經由其[[ ... ]]有條件的右手側(bash的優良替代[ ... ]條件):

[[ "$cpanel" == *"$cpanelstate" ]]

*表示的任何序列字符,以便此條件返回true,如果$cpanel$cpanelstate結尾(注意如何*必須不加引號才能被識別爲特殊模式char。)

+0

@Oleg Gryb是的上述改變糾正了這個問題,它現在工作!感謝您的幫助和解釋。這幫助我瞭解我做錯了什麼,以及如何正確做到這一點!這將幫助我學習如何做到這一點,並在其他情況下也使用它。非常感謝你!! – mvelez83

+0

@ user3765678:我很高興聽到它;別客氣。爲了回答者和未來讀者的利益:如果答案解決了您的問題,請點擊旁邊的大號複選標記以接受答案;如果您至少發現_helpful_,請點擊向上箭頭圖標將其投票。 – mklement0