Sem saída de arquivo de log (ou e-mail com saída) executando o script Python por meio da tarefa cron

1

Eu tenho o cron job a seguir executando um script Python que parece instalar bem sem problemas depois de criá-lo no Crontab e salvar (isso é em um servidor rodando o Centos7). Eu não estou vendo nem um arquivo de log nem qualquer saída enviada para o endereço de e-mail incluído. Eu tentei isso:

*/2 * * * * /home/local/DEV/mdub/FTWFB/FTWFBUploader.py > /home/local/DEV/mdub/FTWFB/logs'date +\%Y-\%m-\%d-\%H:\%M:\%S'-cron.log 2>&1 | mailx -s “Facebook Uploads - Cronlog" [email protected]

e isso:

*/2 * * * * /home/local/DEV/mdub/FTWFB/FTWFBUploader.py | tee /home/local/DEV/mdub/FTWFB/logs'date +\%Y-\%m-\%d-\%H:\%M:\%S'-cron.log | mailx -s “Facebook Uploads - Cronlog" [email protected]

O que estou fazendo de errado?

Em ambos os arquivos, executei chmod +x (filename) e, quando executo manualmente os scripts, eles são executados e saem como esperado.

    
por GeometryFletch 27.08.2015 / 05:55

3 respostas

1

Primeiramente, ao configurar um crontab, use o caminho completo para os comandos e scripts que você está chamando. Por exemplo:

  • tee deve ser /usr/bin/tee
  • mailx deve ser /bin/mailx
  • date deve ser /bin/date

Nota: Se os caminhos forem diferentes no seu sistema, mude conforme apropriado

Além disso, os comandos de encadeamento em um crontab (por exemplo, encanamento, | ) podem ficar confusos rapidamente. Pode ser melhor colocar esses comandos em um script e chamar isso de cron.

Se isso não ajudar, siga estas etapas gerais de solução de problemas para o cron:

Verifique se crond está ativado e em execução, por exemplo:

$ systemctl status crond | grep enabled
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)

$ ps -ef | grep ^root.*crond
root      1251     1  0 May15 ?        00:00:55 /usr/sbin/crond -n

Verifique os registros do cron para ver se algum erro aparece (substitua UserName pelo nome do usuário):

grep UserName /var/log/cron

Verifique o arquivo de mensagens do usuário para ver se alguma saída do cron está aparecendo lá:

more /var/mail/UserName

Se tudo mais falhar, anexe um redirecionamento no final da entrada do crontab para ajudar a detectar quaisquer erros espúrios que possam surgir. Por exemplo, em vez disso:

* * * * * /bin/date | /usr/bin/mailx -s cron.test [email protected]

Faça isso:

* * * * * /bin/date | /usr/bin/mailx -s cron.test [email protected] > /tmp/crontab.test.UserName.log 2>&1
    
por 27.08.2015 / 08:55
1

A melhor prática aqui é escrever um script e chamar esse script por caminho completo no cron. Isso realmente está apenas reforçando o que Gene afirmou, mas escrever um script que executará esses comandos permite que você teste o script antes de colocá-lo em um cron.

Além disso, isso torna o cron mais fácil de ler a longo prazo.

    
por 27.08.2015 / 09:13
-1

Cron não permite% caracteres.

    
por 27.08.2015 / 08:55