为了账号安全,请及时绑定邮箱和手机立即绑定

NRPE Python脚本输出错误

NRPE Python脚本输出错误

郎朗坤 2021-05-30 12:12:23
我的任务是制作一个自定义 python 脚本(因为我不擅长 Bash)在远程 NRPE 客户端上运行,该客户端递归地计算 /tmp 目录中的文件数。这是我的脚本:#!/usr/bin/python3.5import osimport subprocessimport sysfile_count = sum([len(files) for r, d, files in os.walk("/tmp")]) #Recursive check of /tmpif 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我/usr/local/nagios/etc/servers/testserver.cfg在 nagios 服务器上编辑了这个文件,如下所示: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 文件返回。但是,我仍然不知道如何解决此问题。
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

解决了!

解决方案:

  • 转到 nrpe 的 systemd 文件。我的被发现在这里:

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

    find / -name "nrpe.service"

并忽略所有 system.slice 结果

  • 用 vi/nano 打开文件

  • 找到一行PrivateTmp=(通常是倒数第二行)

  • 如果设置为true,则将其设置为false

  • 保存并退出文件,然后运行以下2个命令:

    daemon-reload
    restart nrpe.service

问题解决了。

简短说明:该问题的主要原因是,在debian 9.x中,某些使用systemd的进程默认情况下强制使用了私有tmp目录。因此,如果您有任何其他程序在搜索或索引编制方面存在问题/tmp,则可以定制此解决方案以适合您的情况。


查看完整回答
反对 回复 2021-06-01
  • 2 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号