脚本在服务器:
#!/bin/bash 如果 [ !$# == 1]; 然后 echo "使用 check_cluster" 菲; clu_srv=$1 错误=“停止” 错误1 =“禁用” error2="可恢复" host1=`sudo /usr/sbin/clustat|grep $1| awk {'打印 $2'}` host2=`sudo /usr/sbin/clustat|grep $1| awk {'打印 $3'}` service1=`sudo /usr/sbin/clustat|grep $clu_srv| awk {'打印 $1'}` 如果 [[ "$host2" == "$error" ]] || [[ "$host2" == "$error1" ]]; 然后 echo "CRITICAL - $host1 上的集群 $clu_srv 服务故障转移,状态为 '$host2'" 别的 echo "OK - 集群 $clu_srv 服务在 $host1 上,状态为 '$host2'" 菲; ##--EndScript
它正确地从脚本接收你的参数。当我从命令行在服务器上手动运行此脚本时,它会返回正确的信息,例如:
# /usr/local/nagios/libexec/check_rhcs-ERS NFSService 好的 - 集群 NFSService 服务在 NODE1 上,状态为“已启动”
但是,当我使用以下命令远程尝试使用脚本(check_nrpe)时,它显示的信息不正确:
# ./check_nrpe -H localhost -c check_rhcs-ERS 好的 - 集群 NFSService 服务已开启且状态为“”
nrpe.cfg:
# 命令[check_rhcs-ERS]=/usr/local/nagios/libexec/check_rhcs-ERS NFSService
脚本有什么问题,如何解决?
您的 NRPE 用户很可能没有权限运行具有
sudo
访问权限的命令。为此,您可以使用以下行将以下行添加到您的
/etc/sudoers
文件中visudo
。NFSService
如果您不想限制该部分,也可以省略该部分。也就是说,您的脚本确实需要改进。它也只需要一个参数,而不是三个 -
$2
和$3
变量是awk
参数,而不是bash
参数。我的部分编辑版本如下:
脚本的错误处理部分需要澄清——你想捕捉什么条件?您的
OK
输出提供了 的状态host2
,但表示服务已开启host1
。如果您已正确配置 sudo,则可能是 sudo 的问题
Requiretty
,您应该告诉 sudo 不要要求 nrpe。请参阅sudoers:如何禁用每个用户的 requiretty