サービスの状態を確認したいのですが、サービスが開始されていない場合は、メール(stdout)でステータスを送信してください。
このスクリプトは毎時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)
すべて最高です。