Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NRPE Python脚本输出错误_Python_Nagios_Nrpe - Fatal编程技术网

NRPE Python脚本输出错误

NRPE Python脚本输出错误,python,nagios,nrpe,Python,Nagios,Nrpe,我的任务是制作一个自定义python脚本,因为我不擅长在远程NRPE客户端上运行Bash,该客户端递归地计算/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 < 10

我的任务是制作一个自定义python脚本,因为我不擅长在远程NRPE客户端上运行Bash,该客户端递归地计算/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)
我在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-在/tmp中有3个文件

当我以root用户身份在客户机上运行脚本时,得到了正确的输出 当我以nagios用户的身份在客户机上运行脚本时,我得到了正确的输出 我在Nagios core上的输出似乎正常工作,但当我知道有更多文件时,它显示/tmp中有0个文件。我在客户机上创建了2个文件,在nagios服务器上创建了1个文件。 用于参考的服务器输出:

忽略底层服务器,使用wp代理解决的任何问题也将在wpreess-gkanc1上更改

编辑2:我在nagios服务器上运行了以下操作:

/usr/local/nagios/libexec/check_nrpe -H 192.168.1.59 -c check_tmp_folder 

我确实得到了一个0文件返回。但是,我仍然不知道如何修复此问题。

systemd服务文件,可能此变量设置为true:

PrivateTmp=接受一个布尔参数。如果为true,则为已执行的进程设置一个新的文件系统命名空间,并在其中装载私有/tmp和/var/tmp目录,这些目录不由命名空间之外的进程共享

这有助于确保对进程临时文件的访问安全,但不可能通过/tmp或/var/tmp在进程之间共享。如果启用此选项,则服务停止后,将删除这些目录中由服务创建的所有临时文件。默认为false。通过使用JoinsNamespaceOf=指令,可以在相同的private/tmp和/var/tmp命名空间中运行两个或多个单元,有关详细信息,请参阅systemd.unit5

如果设置了DynamicUser=则暗示此设置。对于此设置,与ReadOnlyPath=和相关调用相同的装载传播和权限限制适用,请参见上文。启用此设置的副作用是在访问/tmp和/var/tmp所需的所有装载单元上添加Requires=和After=依赖项

此外,还添加了systemd-tmpfiles-setup.service8上的隐式After=排序。请注意,此设置的实现可能是不可能的,例如,如果装载名称空间不可用,那么该单元的写入方式不应仅依赖此设置来实现安全性。

已解决

解决方案:

转到您的systemd文件以获取nrpe。我是在这里发现的:

/lib/systemd/system/nrpe.service
如果没有,请运行:

find / -name "nrpe.service"
并忽略所有system.slice结果

用vi/nano打开文件 找到一行,上面写着PrivateTmp=通常是倒数第二行 如果设置为true,则将其设置为false 保存并退出文件,然后运行以下2个命令:

daemon-reload
restart nrpe.service
问题解决了


简要说明:这个问题的主要原因是,对于Debian9.x,一些使用systemd的进程在默认情况下强制使用私有tmp目录。因此,如果您有任何其他程序在/tmp中存在搜索或索引问题,可以根据需要定制此解决方案。

nagios用户或正在运行的用户NRPE是否具有读取目录的权限?您能否在远程服务器上以用户身份运行脚本并获得预期结果?su-nagios-c/usr/local/nagios/libexec/check_tmp.pyYes,在远程服务器上运行上述命令,我得到了所需的输出/usr/local/nagios/libexec/check_nrpe-H 192.168.1.59-su-nagios-c check_tmp_文件夹,在nagios服务器非主机上运行此命令,给了我错误的输出。当我用-su roots替换-su nagios时,它甚至给了我错误的输出。以答案开头很好,但是请格式化它,使其可读。
daemon-reload
restart nrpe.service