Nagios NRPE не читает пользовательский плагин Python, который работает из командной строки

Я создал собственный плагин для NRPE в Python 3. Сценарий запускается, как и ожидалось, когда я запускаю его из командной строки как root и когда я запускаю его как пользователь nagios. (У меня раньше была проблема, когда у пользователя nagios не было разрешений, но я исправил это файл sudoers). У меня есть Arduino Uno, берущий вход от датчика ветра и выводящий скорость как тип float на последовательный монитор. Скрипт Python на моем Raspberry Pi (по аналогии с Debian 9) читает последовательный вывод и определяет, находится ли скорость в определенном диапазоне, а затем завершается с соответствующим кодом. Вот скрипт 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: Неверный вывод

Но когда я перехожу из float(sys.argv[1]) в 1.00 он выводит правильно как: Правильный вывод

Мне нужно иметь возможность использовать sys.argv[], чтобы я мог передавать аргументы из Nagios.

По какой-то причине он всегда выходит с кодом ошибки "1" (предупреждение) и никогда не вводит оператор if при запуске с сервера nagios. Когда я запускаю программу из командной строки, она отлично работает.

Вывод должен выглядеть примерно так: 0.08 MPH | 'Wind Speed'=0.08 где все после канала игнорируется в Nagios, потому что он идет на создание графа перф данных.

Вот некоторые другие вещи, которые могут помочь: nrpe.cfg defenition:

command[check_MPH]=/usr/bin/sudo /usr/local/nagios/libexec/check_MPH.py $ARG1$ $ARG2$

командная строка, отправленная с nagios:

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

где $ARG1$ это 'check_MPH', а $ARG2$ это -a'-w 1.00 -c 15.00'

0 ответов

Другие вопросы по тегам