Linux
Check_nrpe 無法讀取腳本的輸出
腳本在伺服器:
#!/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
腳本有什麼問題,如何解決?
如果您已正確配置 sudo,則可能是 sudo 的問題
Requiretty
,您應該告訴 sudo 不要要求 nrpe。
您的 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
。