Linux

Check_nrpe 無法讀取腳本的輸出

  • August 16, 2016

腳本在伺服器:

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

請參閱sudoers:如何禁用每個使用者的 requiretty

您的 NRPE 使用者很可能沒有權限執行具有sudo訪問權限的命令。

為此,您可以使用以下行將以下行添加到您的/etc/sudoers文件中visudoNFSService如果您不想限制該部分,也可以省略該部分。

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

引用自:https://serverfault.com/questions/797049