서비스 상태를 확인하고 싶은데, 서비스가 시작되지 않은 경우 이메일(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)
모두 제일 좋다.