Python:不启动服务(如果正在运行)的逻辑

时间:2019-02-06 14:42:45

标签: python subprocess

这与我以前的question有关,但是我将其纳入自己的问题,因为我认为这本身就是一个有效的问题。

我有以下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作业?

其次,即使它正在运行,我也不喜欢它如何尝试启动该服务。在当前形式下,如果一切正常,它仅每10秒运行service httpd start。这似乎给系统增加了负担,并且浪费了每个人的时间/精力。必须有一种方法使其仅在尚未运行的情况下尝试启动该过程。

1 个答案:

答案 0 :(得分:0)

有时只是有助于记录您所面临的问题。当我在上面键入内容时,我意识到一种简单的实现方法是仅添加相反的对等条件:

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)