shell script no crontab, nem toda saída sendo registrada

1

Eu tenho um script de shell simples que executa alguns comandos LFTP e processa os arquivos.
Quando corro direto do bash recebo a saída completa desses comandos LFTP na tela.

Ao executar o crontab com o seguinte ...
*/5 * * * * /bin/bash /home/user/ftp-getter.sh >> /var/log/ftp-getter.log 2>&1
Eu só obtenho a saída de linhas onde estou repetindo explicitamente alguma saída e a saída do comando date . O texto retornado pelo LFTP não entra no log.

Eu tentei mover o 2>&1 para antes do >> e ainda obter o mesmo resultado.

Ao executar esse comando crontab direto da linha de comando, recebo a saída do LFTP na tela e no arquivo de log. Mas não quando correndo em crontab.

Existe algo especial sobre a saída do LFTP que causaria isso e que poderia se aplicar a outros comandos ao executar a partir de um script de shell no crontab?

    
por batfastad 25.02.2013 / 11:11

4 respostas

1

lftp pode estar usando descritores de arquivos diferentes de STDOUT e STDERR. Verifique executando o comando em strace

strace lftp ...

e procure as linhas que começam com "write":

write(3, ...

O número é o descritor ao qual o programa grava. Redirecionar esse descritor também.

... >> /var/log/ftp-getter.log 2>&1 3>&1
    
por 25.02.2013 / 11:34
1

Redirecionar a partir do crontab deve funcionar, mas outra abordagem que você pode tentar é usar exec dentro do script para redirecionar todas as saídas. Use-o no início do script:

exec 1>> /var/log/ftp-getter.log 2>&1

Agora, você não precisa redirecionar explicitamente a saída de comandos individuais no script.

    
por 26.02.2013 / 03:19
0

Funciona para mim

*/5 * * * * screen -dmS ftp-getter /bin/bash /home/user/ftp-getter.sh >> /var/log/ftp-getter.log 2>&1
    
por 02.07.2016 / 19:27
0

Uma razão comum para coisas que não funcionam no cron, mas funcionam em uma sessão de shell é uma diferença de ambiente.

Compare a saída do env quando executado do cron versus o shell. Lembre-se de que um shell lançado a partir do cron não é interativo, o que pode resultar em diferenças na forma como seus scripts de init provisionam seu ambiente.

    
por 03.07.2016 / 10:44