我怎样才能使check_nrpe等待我的远程脚本完成执行?

我有一个Python脚本被用作NRPE的插件。 该脚本通过附加“ps ax | grep进程”执行SSH单线程来检查是否在虚拟机上运行进程。 手动执行脚本时,它按预期方式工作,并返回NRPE的单行输出以及基于进程是否正在运行的状态。

当我尝试运行命令设置来执行此脚本(从我的Nagios服务器)时,我立即得到输出“NRPE:无法读取输出”,但是当我手动运行脚本时,需要大约一秒的时间才能返回输出。 其他命令运行的很好,所以看起来NRPE需要等待一两秒钟输出,而不是立即失败,但是我一直无法find任何解决方法。 有小费吗?

PS:虚拟机不能从主机以外的任何地方访问,因此需要使用nrpe插件从主机ssh进入虚拟机来检查进程。

您可以按照这里的说明更改超时时间,或者在nrpe文档中search超时时间,但我不认为这是您的问题,或者您会看到如下错误:

CHECK_NRPE: Socket timeout after 270 seconds.

也有可能是一个nagios插件,将返回你已经写好的数据。

为什么不使用check_proc插件?

在虚拟机上,在/etc/nagios/nrpe.cfg为您的服务定义一个命令:

command[check_<service_name>]=/usr/lib64/nagios/plugins/check_procs -c 1:1 -C <service_name>

并从Nagios服务器:

 define service{ use critical-service host_name xx service_description <service_name> check_command check_nrpe!check_<service_name> event_handler autostart_<service_name>!xx process_perf_data 0 contact_groups admin } 

样本结果:

 # su - nagios -s /bin/bash -bash-3.2$ /usr/local/nagios/libexec/check_nrpe -H xx -c check_<service_name> PROCS OK: 1 process with command name '<service_name>' 

我认为默认的超时时间是10秒左右,所以这可能不是。

如果您使用ssh执行检查,请记住nrpe可能以用户“nagios”运行(取决于安装选项)。 该用户是否有正确的密钥和SSH选项?