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

3

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

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

Isto 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 ao exibir pwd ?

    
por Martinos 19.02.2015 / 19:11

3 respostas

6

Os comandos estão sendo executados independentemente, 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, em seguida, chamando o script do crontab.

Atualização: O acima foi um palpite, e / ou propôs a possibilidade (como um comentário tão severamente e agressivamente apontado). Então eu decidi testar no CentOS 6.6 e ... Eu estava errado ... A seguinte entrada crontab funcionou corretamente:

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

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

    
por 19.02.2015 / 19:45
4

Os seguintes itens devem funcionar:

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

Ao colocar os comandos entre parênteses, você deve forçá-los a serem executados no mesmo subnível.

    
por 19.02.2015 / 20:37
2

De acordo com este Unix e Linux SE answer , você pode substituir ; por && , pois versões diferentes do cron em diferentes distribuições Linux lidam com esse tipo de funcionalidade de diferentes maneiras:

cd /home/joe/dev && echo 'pwd' | logger
    
por 19.02.2015 / 20:24