这与我以前的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
。这似乎给系统增加了负担,并且浪费了每个人的时间/精力。必须有一种方法使其仅在尚未运行的情况下尝试启动该过程。
答案 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)