脚本在服务器上:
/bin/bash #!/bin/bash 如果 [ !$# == 1 ]; 那么 echo“使用 check_cluster ” 科幻; clu_srv=$1 错误=“已停止” 错误1=“已禁用” 错误2="可恢复" host1 =`sudo /usr/sbin/clustat|grep $1|awk {'print $2'}` host2 =`sudo /usr/sbin/clustat|grep $1|awk {'print $3'}` service1 =`sudo /usr/sbin/clustat|grep $clu_srv|awk{'print $1'}` 如果 [[ "$host2" == "$error" ]] || [[ "$host2" == "$error1" ]]; 然后 echo “严重 - 集群 $clu_srv 服务在 $host1 上发生故障转移且状态为 '$host2'” 别的 echo “OK - 集群 $clu_srv 服务位于 $host1 上并且状态为 '$host2'” 科幻; ##--结束脚本
它正确地接收了来自脚本的参数。当我从命令行在服务器上手动运行此脚本时,它返回了正确的信息,例如:
#/usr/local/nagios/libexec/check_rhcs-ERS NFS服务 正常 - 集群 NFSService 服务位于 NODE1 上,状态为“已启动”
但是当我尝试使用以下命令远程运行脚本(check_nrpe)时,它显示了不正确的信息:
#./check_nrpe-H 本地主机-c check_rhcs-ERS 确定 - 集群 NFSService 服务已开启且状态为 ''
nrpe.cfg:
# 命令 [check_rhcs-ERS]=/usr/local/nagios/libexec/check_rhcs-ERS NFSService
脚本有什么问题?如何修复?
答案1
如果您已经正确配置了 sudo,那么它可能存在问题Requiretty
,您应该告诉 sudo 不要要求 nrpe。
答案2
您的 NRPE 用户很可能没有权限运行具有sudo
访问权限的命令。
/etc/sudoers
为了实现这一点,您可以使用将下面的行添加到文件中。如果您不想限制该部分,visudo
也可以省略该部分。NFSService
nrpe ALL=(ALL) NOPASSWD: /usr/sbin/clustat NFSService
话虽如此,你的剧本确实需要改进。它也只需要一参数,而不是三个 -$2
和$3
变量是awk
参数,而不是bash
参数。
我的部分编辑版本如下:
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Usage check_cluster " >&2
exit 1
fi
clu_srv=$1
error="stopped"
error1="disabled"
error2="recoverable"
host1=$(sudo /usr/sbin/clustat | grep "${clu_srv}" | awk '{ print $2 }')
host2=$(sudo /usr/sbin/clustat | grep "${clu_srv}" | awk '{ print $3 }')
service1=$(sudo /usr/sbin/clustat | grep "${clu_srv}" | awk '{ print $1}')
脚本的错误处理部分需要澄清 - 您想要捕获哪些条件?您的OK
输出给出了 的状态host2
,但表示服务已开启host1
。