Por que o cd não altera o diretório atual no crontab?

Por que o cd não altera o diretório atual no crontab?

No crontab do meu usuário, em um sistema CentOS, tenho algo assim:

58 12 * * * cd /home/joe/dev; echo `pwd` | logger

Isso resulta em /var/log/messages:

Feb 19 12:58:01 srv01 joe: /home/joe

Em vez de produzir:

Feb 19 12:58:01 srv01 joe: /home/joe/dev

Por que o diretório não é mantido durante a saída pwd?

Responder1

O seguinte deve funcionar:

58 12 * * * (cd /home/joe/dev; echo `pwd` | logger)

Ao colocar os comandos entre parênteses, você deve forçar todos eles a serem executados no mesmo subshell.

Responder2

Os comandos estão sendo executados de forma independente, portanto não é o mesmo que esperar que eles sejam executados no mesmo shell/ambiente. Você provavelmente seria melhor servido criando um script de shell que executa os comandos desejados e depois chamando o script do crontab.

Atualização: O que foi dito acima foi um palpite e/ou uma possibilidade proposta (como um comentário apontado de forma tão concisa e agressiva). Então decidi testar no CentOS 6.6 e... me enganei... A seguinte entrada do crontab funcionou corretamente:

* * * * * echo \`pwd` |logger; cd /home; echo `pwd` |logger;

Então isso deveria ter funcionado para você ... Eu ainda afirmo que seria melhor servir você chamando scripts e não comandos individuais em seu crontab ... mas isso é uma preferência (então, por favor, seja gentil nos comentários ...).

Responder3

Conformeesta resposta Unix e Linux SE, você pode substituir ;por &&diferentes versões do cron em diferentes distribuições Linux que lidam com esse tipo de funcionalidade de maneiras diferentes:

cd /home/joe/dev && echo `pwd` | logger

informação relacionada