nagiosnrpe没有从lin命令读取运行良好的自定义python插件

2024-06-09 14:35:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Python3中为NRPE创建了一个自定义插件。当我以root用户身份从命令行运行脚本时,当我以nagios用户身份运行它时,它按预期运行。(以前nagios用户没有权限时,我遇到了一个问题,但我修复了sudoers文件)。我有一个Arduino Uno从一个风传感器输入,并输出速度作为类型浮动到串行监视器。我的Raspberry Pi(操作系统类似于debian9)上的python脚本读取串行输出并确定速度是否在特定范围内,然后使用相应的代码退出。下面是python脚本:

#!/usr/bin/python3

import serial
import sys
import time

port = '/dev/ttyACM0'
baud = 9600

ser = serial.Serial(port,baud)
time.sleep(1) #allow time to connect with serial
def read_sensor():
    i = 0
    MPH_list = [] #used to find average of wind speed
    while i < 5:
        try:
            speed = ser.readline()
            speed = speed.decode("utf-8")
            MPH_list.append(float(speed))

            i += 1
        except:
            print('Failed to read Serial Monitor')
            sys.exit(3) #unknown exit status

    avgMPH = sum(MPH_list) / len(MPH_list) #average wind speed
    print("%.2f MPH | 'Wind Speed'=%.2f" % (avgMPH,avgMPH)) #speed | performance data

    if avgMPH < float(sys.argv[1]):
        exit_code = 0
    elif avgMPH >= float(sys.argv[1]) and avgMPH < float(sys.argv[2]):
        exit_code = 1
    elif avgMPH >= float(sys.argv[2]):
        exit_code = 2
    else:
        exit_code = 3

    return exit_code

sys.exit(read_sensor())

当我有上述代码时,我在Nagios中得到以下响应: Wrong Output

但是当我从float(sys.argv[1])改为1.00时,它正确地输出为:Correct Output

我需要能够使用系统argv[]所以我可以从Nagios传入参数。在

由于某些原因,当从nagios服务器运行时,它总是带着“1”(警告)错误代码退出,并且从不输入if语句。当我从命令行运行这个程序时,它运行得很好。在

{perfios>将忽略图形中的任何内容,因为它应该在Nagios输出之后被忽略。在

以下是一些其他可能有帮助的事情: 自然资源配置命令防御:

^{pr2}$

从nagios发送的命令行:

$USER1$/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$ $ARG2$

其中,$ARG1$是“check_MPH”,而$ARG2$是-a'-w 1.00-c15.00'


Tags: 命令行用户import脚本sysexitserialcode