O script Bash não funciona corretamente no crontab, mas funciona manualmente

1

Pesquisa

Talvez eu esteja usando o vocabulário incorreto, mas não consigo encontrar uma cópia do meu problema. Eu estou tentando executar dois programas dentro do meu shell script e o cron está claramente executando o primeiro script, mas não o segundo.

Meta

Eu tenho dois scripts python, views.py que é executado como um servidor web e housekeeping.py que cuida de algumas verificações de limpeza e atualização com as quais a interface da web não precisa se preocupar. Atualmente, eles podem ser iniciados manualmente usando sudo /home/ubuntu/start_server.sh e tudo funciona perfeitamente. Estou usando a porta 80, portanto, preciso executar como root.

Script Bash

O script completo:

#!/bin/bash

/home/ubuntu/py3env/bin/python /home/ubuntu/flask_portal/views.py &
/home/ubuntu/py3env/bin/python /home/ubuntu/flask_portal/housekeeping.py &

Meu entendimento é que o & fará com que os aplicativos sejam executados em segundo plano.

Quando executo manualmente, o script de shell funciona perfeitamente.

Crontab

Para abrir o crontab, estou usando

sudo crontab -u root -e

Como eu disse acima, estou usando a porta 80, por isso preciso executar meu script como root.

Dentro do arquivo crontab, eu tenho uma única entrada:

@reboot /home/ubuntu/start_server.sh

Resultados

Quando eu executo com a mão, ambos os scripts começam perfeitamente. Quando eu permito que o servidor reinicie e execute o próprio script start_server.sh , o servidor web views.py funciona muito bem, mas housekeeping.py nunca inicia (estou fazendo o registro dentro desse arquivo, por isso não está gerando o próprio arquivos). Além disso, quando executo python aux | grep python , vejo que views.py e housekeeping.py estão sendo executados.

    
por slightlynybbled 01.12.2016 / 04:09

1 resposta

0

Graças ao muru, consegui encontrar a resposta para a minha pergunta.

Ocorre que o script bash e a tarefa cron estão funcionando corretamente. O housekeeping.py teve um erro que ocorre quando executado como 'root' e não 'ubuntu', mas que eu não pude ver.

O erro foi revelado adicionando o seguinte ao topo do script bash:

exec 2>/home/ubuntu/log

Que tem o efeito de canalizar a saída de todos os programas iniciados no script bash para um arquivo de log.

    
por slightlynybbled 01.12.2016 / 13:17