Script de shell com pipes não funcionando no crontab

2

Eu tenho um shell script que funciona bem quando executado manualmente, mas falha quando executado através do crontab. O script basicamente faz o seguinte:

Python script to get audio data and pipe to stdout | ffmpeg the data from stdin and pipe to stdout | stream the data from stdin

Quando executado através do crontab, o streaming falha, reclamando que não há dados no stdin ( ...No (more) data available on standard input ).

Eu encontrei esta resposta que parece aludir à questão dos descritores de arquivos no crontab, mas eu apreciaria mais alguns detalhes sobre o problema e a melhor maneira de contornar isso.

EDITAR: Resolver o problema tentando cada comando individual separadamente mostra que o problema começa no script python que se queixa:

close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr"

em vez de enviar dados de áudio. Seguindo o conselho aqui e aqui (adicionado sys.stdout.flush () ao final do arquivo) Eu posso ver a mensagem de erro real:

Traceback (most recent call last):
  File "/home/*username*/testing.py", line 109, in <module>
    sys.stdout.flush()
IOError: [Errno 9] Bad file descriptor

Então, talvez seja mais um problema de python. Embora o erro ainda parece ter a ver com stdin / stdout

    
por andrewmh20 07.06.2017 / 18:57

1 resposta

2

Como se constata, o problema realmente era o arquivo python e o cron, mas não um problema com os descritores de arquivos (stdin / stdout) da maneira que eu esperava.

Em vez disso, conforme esta resposta tendo uma linha pedindo a entrada do usuário enquanto a execução pelo cron estava causando o problema. Eu resolvi o problema, removendo o pedido de entrada do usuário como para mim era desnecessário.

    
por 08.06.2017 / 04:45