¿Por qué cd no cambia el directorio actual en crontab?

¿Por qué cd no cambia el directorio actual en crontab?

En el crontab de mi usuario, en un sistema CentOS, tengo algo como esto:

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

Esto genera en /var/log/messages:

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

En lugar de generar:

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

¿Por qué no se conserva el directorio al generar pwd?

Respuesta1

Lo siguiente debería funcionar:

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

Al envolver los comandos entre paréntesis, debe forzar que todos se ejecuten en el mismo subshell.

Respuesta2

Los comandos se ejecutan de forma independiente, por lo que no es lo mismo que esperar que se ejecuten en el mismo shell/entorno. Probablemente sería mejor crear un script de shell que ejecute los comandos deseados y luego llamar al script desde crontab.

Actualización: Lo anterior fue una suposición y/o una posibilidad propuesta (como lo señaló un comentario de manera tan concisa y agresiva). Así que decidí probar en CentOS 6.6 y... me equivoqué... La siguiente entrada del crontab funcionó correctamente:

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

Así que eso debería haber funcionado para usted... Sigo manteniendo que sería mejor llamar a scripts y no a comandos individuales en su crontab... pero eso es una preferencia (así que sea amable en los comentarios...).

Respuesta3

segúnesta respuesta de Unix y Linux SE, puede reemplazarlo ;, &&ya que las diferentes versiones de cron en diferentes distribuciones de Linux manejan este tipo de funcionalidad de diferentes maneras:

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

información relacionada