
En una nueva instalación de Ubuntu, el usuario PATH
es:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Pero en el entorno cron de ese mismo usuario, es:
/usr/bin:/bin
Miré todos los archivos dot del usuario en el directorio de inicio, nada allí cambia el archivo PATH
.
¿Qué está cambiando PATH
? ¿Por qué cron no usa eso PATH
?
Respuesta1
Con respecto a la pregunta: ¿por qué es así? La página del manual que lo explica es crontab(5)
, IOW, a la que se puede acceder man 5 crontab
(no la predeterminada en la sección 1). El demonio cron no intenta emular una sesión de shell, sino que configura un entorno mínimo y limpio para que se ejecuten los trabajos cron y luego, a su vez, permite que el archivo crontab establezca sus propias variables de entorno arbitrarias. El nuevo demonio cron incluido con Debian también tiene varias disposiciones adicionales para, pam_env
etc.
Respuesta2
Cron no ejecuta procesos en un shell de inicio de sesión. Debido a esto, no todos los scripts típicos se generan cuando se ejecuta un proceso.
La ejecución del proceso desde un shell de inicio de sesión debería replicar el entorno del usuario.
Ponga algo como esto en un crontab y compare las dos salidas:
*/1 * * * * /usr/bin/env > /tmp/env
*/1 * * * * /usr/bin/bash -l -c /usr/bin/env > /tmp/bashenv
Como puede ver, /tmp/bashenv
tendrá una gran cantidad de variables de entorno que /tmp/env
no las tiene. Esto se debe a que env
se invocó en un shell de inicio de sesión usando bash -l
.