Python: логика не запускает службу, если она запущена - PullRequest
0 голосов
/ 06 февраля 2019

Это как бы связано с моим предыдущим вопросом , но я поставил его на свой собственный вопрос, так как считаю, что это правильный вопрос сам по себе.

У меня есть вопросследующий python, который остановит службу httpd, если служба radiusd завершится с ошибкой.Причина этого кроется в деталях

import os
import subprocess
import time


def running(name):
    with open(os.devnull, 'wb') as hide_output:
        exit_code = subprocess.Popen(['service', name, 'status'], stdout=hide_output, stderr=hide_output).wait()
        return exit_code == 0

while True:
    if not running('radiusd'):
        os.system('service httpd stop')

    if running('radiusd'):
        os.system('service httpd start')

    time.sleep(10)

Во-первых, я запускаю это в цикле навсегда и планировал запустить его при запуске в .bashrc или что-то в этом роде.Так что каждые 10 секунд он будет работать.С концептуальной точки зрения это нормально, но есть ли лучший способ проводить опрос каждые несколько секунд без использования задания cron?

Во-вторых, мне не нравится, как он пытается запустить службу, даже если она работает.В текущей форме он просто запускает service httpd start каждые 10 секунд, если все в порядке.Это похоже на нагрузку на систему и немного затрат времени / энергии.Должен быть способ запустить процесс, только если он еще не запущен.

1 Ответ

0 голосов
/ 06 февраля 2019

Иногда, если просто помогает записать проблемы, с которыми вы сталкиваетесь.Набирая вышесказанное, я понял, что простой способ добиться этого - просто добавить противоположные условные выражения как таковые:

import os
import subprocess
import time


def running(name):
    with open(os.devnull, 'wb') as hide_output:
        exit_code = subprocess.Popen(['service', name, 'status'], stdout=hide_output, stderr=hide_output).wait()
        return exit_code == 0

while True:
    if not running('radiusd'):
        if running('httpd'):
            os.system('service httpd stop')

    if running('radiusd'):
        if not running('httpd'):
            os.system('service httpd start')

    time.sleep(10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...