
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