我想获取服务状态,如果未启动,则通过电子邮件发送状态(标准输出)。
该脚本计划由 cron 每小时运行一次。
手动运行时,以下工作正常:
def is_service_running(name):
with open(os.devnull, 'wb') as hide_output:
proc = subprocess.Popen(['service', name, 'status'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
output = proc.stdout.read()
exit_code = proc.wait()
return exit_code == 0, output
但是当通过 cron 运行时。output
是空的。cron运行时
如何捕获?stdout
谢谢
答案1
问题不是 cron 而是shell=True
.
显然,当使用 时shell=True
,popen 需要单个字符串而不是列表。
因此,当我将通话更新为:
proc = subprocess.Popen(['service ' + name + ' status'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
一切顺利。