【发布时间】:2018-08-22 08:57:30
【问题描述】:
我的任务是制作一个自定义 python 脚本(因为我不喜欢 Bash)在远程 NRPE 客户端上运行,该客户端递归地计算 /tmp 目录中的文件数。这是我的脚本:
#!/usr/bin/python3.5
import os
import subprocess
import sys
file_count = sum([len(files) for r, d, files in os.walk("/tmp")]) #Recursive check of /tmp
if file_count < 1000:
x = subprocess.Popen(['echo', 'OK -', str(file_count), 'files in /tmp.'], stdout=subproce$
print(x.communicate()[0].decode("utf-8")) #Converts from byteobj to str
# subprocess.run('exit 0', shell=True, check=True) #Service OK - exit 0
sys.exit(0)
elif 1000 <= file_count < 1500:
x = subprocess.Popen(['echo', 'WARNING -', str(file_count), 'files in /tmp.'], stdout=sub$
print(x.communicate()[0].decode("utf-8")) #Converts from byteobj to str
sys.exit(1)
else:
x = subprocess.Popen(['echo', 'CRITICAL -', str(file_count), 'files in /tmp.'], stdout=su$
print(x.communicate()[0].decode("utf-8")) #Converts from byteobj to str
sys.exit(2)
编辑 1: 我尝试将 file_count 硬编码为 1300 并收到警告:1300 files in /tmp。看来问题仅在于 nagios 服务器能够读取客户端计算机 /tmp 中的文件。
我做了什么:
- 我将脚本与其余脚本放在目录中。
-
我已经在客户端机器上编辑了
/usr/local/nagios/etc/nrpe.cfg,其中包含以下行:command[check_tmp]=/usr/local/nagios/libexec/check_tmp.py -
我在nagios服务器上编辑了这个
/usr/local/nagios/etc/servers/testserver.cfg文件如下:define service { use generic-service host_name wp-proxy service_description Files in /tmp check_command check_nrpe!check_tmp }
输出:
正确的输出是:OK - 3 files in /tmp
- 当我以 root 身份在客户端计算机上运行脚本时,我得到了正确的输出
- 当我以 nagios 用户身份在客户端计算机上运行脚本时,我得到了正确的输出
- 我在 Nagios 核心上的输出似乎可以正常工作,但是当我知道还有更多文件时,它显示
/tmp中有 0 个文件。我在客户端机器上创建了 2 个文件,在 nagios 服务器上创建了 1 个文件。
服务器输出供参考:
https://puu.sh/BioHW/838ba84c3e.png
(忽略底层服务器,使用wp-proxy解决的任何问题也会在wpreess-gkanc1上更改)
编辑 2: 我在 nagios 服务器上运行了以下命令:
/usr/local/nagios/libexec/check_nrpe -H 192.168.1.59 -c check_tmp_folder
我确实得到了一个 0 文件的回报。但是,我仍然不知道如何解决此问题。
【问题讨论】:
-
nagios 用户或运行的用户 NRPE 是否有权限读取目录?您能否以远程服务器上的用户身份运行脚本并获得预期的结果?
su nagios -c "/usr/local/nagios/libexec/check_tmp.py" -
是的,在远程服务器上运行上面的命令我得到了想要的输出
-
/usr/local/nagios/libexec/check_nrpe -H 192.168.1.59 -su nagios -c check_tmp_folder 在 Nagios 服务器(不是主机)上运行它,给我一个错误的输出。当我用 -su root 替换 -su nagios 时,它甚至给了我错误的输出