Check_nrpe 无法读取脚本的输出

Check_nrpe 无法读取脚本的输出

脚本在服务器上:

/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。

sudoers:如何禁用每个用户的 requiretty

答案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

相关内容