Скрипт Python Nagios ожидает выполнения - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть этот скрипт, который запускается nagios, который проверяет API провайдера, если включено смягчение, и отчитывается.Я просто скопировал пример из Nagios, у меня нет никаких знаний Python.Проблема в том, что иногда сценариям требуется 10 секунд для запуска, а python просто продолжается, поэтому мне нужно, чтобы он дождался исполнения.

Я нашел несколько примеров использования подпроцесса, которые были успешными, но я не знаю, как добавить.readline и .strip к команде.

Это оригинальный скрипт:

#!/usr/bin/python
import os, sys
mitigation_enabled=os.popen("/usr/local/nagios/libexec/check_mitigation.py 
| grep auto | awk '{print $2}'").readline().strip()

if mitigation_enabled == "false":
    print "OK - Mitigation disabled." .format (mitigation_enabled)
    sys.exit(0)
elif mitigation_enabled == "true":
    print "WARNING - Mitigation enabled." .format (mitigation_enabled)
    sys.exit(1)
else:
    print "UKNOWN - mitigation status unknown." .format (mitigation_enabled)
    sys.exit(2)

Так как мне сделать это с подпроцессом, дождаться выполнения внешнего скрипта и добавитьзначения .readline и .strip?

Короткий вопрос, как заставить это работать:)

Спасибо!

1 Ответ

0 голосов
/ 28 апреля 2019

Вы жалуетесь на то, что древний исторический API разрешал "короткие чтения" нулевых байтов. Да, это правильно, он работает как задумано.

Рекомендую использовать подпроцесс напрямую.

Также две гниды о awk '{print $2}':

  1. Удалите grep, вызвав awk '/auto/ {print $2}'.
  2. Удалите накладные расходы дочернего элемента awk, используя split () .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...