2014-06-22 47 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