Obtendo subprocess.Popen stdout quando executado pelo cron

0

Eu quero obter um status de serviço e, se não estiver ativo, enviar o status (stdout) por email.
Esse script está agendado para ser executado a cada hora pelo cron.
Ao executar manualmente, o seguinte funciona bem:

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

Mas quando executado pelo cron. output está vazio.
Como posso capturar stdout quando executado pelo cron? Obrigado

    
por SagiLow 14.06.2018 / 17:14

1 resposta

0

O problema não foi cron mas shell=True .
Aparentemente, ao usar shell=True , o popen espera uma única string e não uma lista.
Então, quando atualizei minha ligação para:

proc = subprocess.Popen(['service ' + name + ' status'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)

tudo funcionou.

    
por 15.06.2018 / 11:22