我正在开发一个自定义Nagios脚本,该脚本将监视cPanel以确保它正在运行并根据从服务cpanel状态输出获得的内容返回状态。这就是我所拥有的:
##############################################################################
# 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
当我运行脚本时,这是我得到的输出:
root@shared01 [/home/mvelez]# /usr/local/nagios/libexec/check_cpanel
CRITICAL - cPanel is NOT running
当我运行脚本时,cPanel IS RUNNING但这是我得到的输出。事实上,无论cPanel的状态报告是什么,这都是输出。当我注释掉ELSE,ECHO和EXIT 2语句时:
#else
# echo $ALERT_CRITICAL
# exit 2
它返回一个空白输出:
root@shared01 [/home/mvelez]# /usr/local/nagios/libexec/check_cpanel
root@shared01 [/home/mvelez]#
我不确定我做错了什么,因为我很擅长打击脚本并试着学习。非常感谢您提供的任何和所有帮助!
答案 0 :(得分: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
答案 1 :(得分:0)
@Oleg Gryb's answer解决了您的问题,但至于原始脚本无效的原因:
[ "$cpanel" = "$cpanelstate" ]
将完整命令输出(例如cpsrvd (pid 10066) is running...
)与预期输出的{em>子串进行比较,running...
平等,显然会失败。
解决方案是使用bash
的模式匹配,通过其[[ ... ]]
条件的右侧提供(bash的高级替代[ ... ]
条件):
[[ "$cpanel" == *"$cpanelstate" ]]
*
表示任何字符序列,因此如果$cpanel
以 $cpanelstate
结尾,则此条件返回true(请注意*
必须如何不加引号被认为是特殊模式char。)