脚本在服务器上:
#!/斌/庆典
如果[! $#== 1]; 然后
echo“用法check_cluster”
networking连接;
clu_srv = $ 1
错误=“停止”
ERROR1 = “禁用”
误差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“CRITICAL - $ host1上的群集$ clu_srv服务故障转移,状态为'$ host2'”
其他
回声“确定 - 群集$ clu_srv服务在$ host1上,状态是'$ host2'”
networking连接;
## - EndScript
它正确地从脚本接收你的论点。 当我在服务器上从命令行手动运行这个脚本时,它会返回正确的信息,例如:
#/ usr / local / nagios / libexec / check_rhcs-ERS NFSService OK - 集群NFSService服务在NODE1上,状态为“启动”
但是,当我用脚本(check_nrpe)远程尝试使用以下命令显示不正确的信息:
#./check_nrpe -H localhost -c check_rhcs-ERS OK - 集群NFSService服务开启,状态为“
nrpe.cfg:
#命令[check_rhcs-ERS] = / usr / local / nagios / libexec / check_rhcs-ERS NFSService
脚本是什么错,如何解决?
如果您已经正确configuration了sudo,那么可能是Requiretty的问题,您应该告诉sudo不要求nrpe。
请参阅sudoers:如何为每个用户禁用requiretty
您的NRPE用户很可能没有权限使用sudo访问来运行命令。
为了做到这一点,你可以使用visudo将下面的行添加到你的/etc/sudoers文件中。 如果您不想限制该部分,也可以省略NFSService部分。
nrpe ALL=(ALL) NOPASSWD: /usr/sbin/clustat NFSService
也就是说,你的脚本确实需要改进。 它也只需要一个参数,而不是三个 – $2和$3variables是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}')
脚本的error handling部分需要澄清 – 你想要捕捉什么条件? 您的OK输出给出host2的状态,但是表示服务在host1 。