Por que o redirecionamento no crontab resulta em um arquivo de byte zero?

3

Sistema: Xubuntu 13.10

Quando eu tenho essa entrada crontab

*/5 * * * * cat /home/dbk/.bash_aliases &> /home/dbk/Desktop/junk

junk tem um tamanho de byte de 0 .

Rodando

$ cat /home/dbk/.bash_aliases &> /home/dbk/Desktop/junk

fornece um arquivo com tamanho e conteúdo adequados.

    
por DK Bose 23.03.2014 / 18:51

1 resposta

4

O problema porque cron executa a tarefa com sh . &> é um atalho para redirecionar os stderr e stdout para o mesmo arquivo em bash , não em sh .

Em sh , seu comando:

cat /home/dbk/.bash_aliases &> /home/dbk/Desktop/junk

significa executar dois comandos separadamente:

  • Executar cat /home/dbk/.bash_aliases no plano de fundo

    cat /home/dbk/.bash_aliases &

  • Trunque o arquivo indesejado.

    > /home/dbk/Desktop/junk

Portanto, você deve usar bash para executar seu comando em crontab :

*/5 * * * * bash -c "cat /home/dbk/.bash_aliases &> /home/dbk/Desktop/junk"

ou usando uma maneira mais portátil:

*/5 * * * * cat /home/dbk/.bash_aliases > /home/dbk/Desktop/junk 2>&1
    
por 23.03.2014 / 19:11