stdout e stderr do script não são redirecionados quando executados pelo cron


3

./script & >> log.txt

Eu recebo um bom arquivo de log, mas se eu tiver o mesmo comando executado pelo cron, digamos que o crontab fique assim:

* * * * * '/home/user/script &>> /home/user/log.txt'

o log.txt estará vazio, tentei "and 'e` e nenhum tick para incluir o comando, alguma idéia de por que os fluxos não serão gravados no arquivo?

Respostas:


6

Provavelmente, o shell que o cron usa não suporta o operador de redirecionamento abreviado &>>que o Bash suporta.

Você deve usar o formulário portátil suportado no shell Bourne e outros:

* * * * * /home/user/script >> /home/user/log.txt 2>&1

Isso diz "acrescente a saída padrão (descritor de arquivo 1) ao arquivo e envie o erro padrão (descritor de arquivo 2) ao mesmo local".

E você não precisa de aspas.


+1 para também redirecionar o erro padrão! Não é à toa que não está produzindo nada.
Utilizador

1
  1. Não inclua aspas para o comando no crontab.

  2. Considere executar um script de configuração do ambiente que faça seu próprio redirecionamento, em vez de confiar no cron para fazer isso.

Na minha experiência, quanto menos houver no arquivo crontab, melhor. Meus arquivos crontab consistem nos controles de tempo, além de um simples nome absoluto de comando (ksh) e o comando a ser executado:

#   @(#)$Id: crontab,v 4.2 2007/09/17 02:41:00 jleffler Exp $
#   Crontab file for Home Directory for Jonathan Leffler (JL)
#-----------------------------------------------------------------------------
#Min     Hour    Day     Month   Weekday Command
#-----------------------------------------------------------------------------
0        *       *       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/hourly
1        1       *       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/daily
23       1       *       *       1-5     /usr/bin/ksh /work1/jleffler/bin/Cron/weekday
2        3       *       *       0       /usr/bin/ksh /work1/jleffler/bin/Cron/weekly
21       3       1       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/monthly

11
Seu ponto 1 é um pouco enganador (acho que você quer dizer "Não cite todo o comando"). cron normalmente usa /bin/sho que certamente é capaz de lidar citando, mas citações do OP foram usados incorretamente (da mesma forma, o redirecionamento não foi sh compatível). Algumas versões do cron permitem que os arquivos crontab especifiquem qual shell deve interpretar os comandos; portanto, pode ser possível usar os recursos e a sintaxe do seu shell favorito diretamente em uma entrada do crontab. Embora certamente concorde que manter simples as entradas do crontab é uma boa sugestão.
31810 Chris Johnsen

@ Chris: sim - minha declaração é muito abrangente e sua análise está correta. Obrigado.
Jonathan Leffler
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.