¿Por qué el ENV cron es diferente del ENV del usuario?

¿Por qué el ENV cron es diferente del ENV del usuario?

En una nueva instalación de Ubuntu, el usuario PATHes:

/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_envetc.

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/bashenvtendrá una gran cantidad de variables de entorno que /tmp/envno las tiene. Esto se debe a que envse invocó en un shell de inicio de sesión usando bash -l.

información relacionada