Ejecuté mi trabajo crontab 0 2 */1 * * /aScript >aLog.log 2>&1
como usuario 'root' y, sin embargo, encontré que el env es diferente del env del usuario 'root' y, por lo tanto, experimenta un comportamiento de tiempo de ejecución diferente de mis scripts.
Un intento de reparación fue colocar comandos de exportación en archivos rc.d, ¡pero todavía no apareció! Termino colocando comandos de exportación en el propio aScript .
Mi pregunta es: ¿hay una mejor manera de abordar este problema? y ¿por qué falta env aunque sea del mismo usuario 'root'? (Modifico crontab ejecutando 'crontab -e' desde la raíz)
linux
cron
environment-variables
Bambú
fuente
fuente
source
su perfil (bash).Respuestas:
Cron siempre se ejecuta con un entorno mayormente vacío. HOME, LOGNAME y SHELL están configurados; y un camino muy limitado. Por lo tanto, es aconsejable utilizar rutas completas a los ejecutables y exportar cualquier variable que necesite en su script cuando use cron.
Hay varios enfoques que puede usar para configurar sus variables de entorno en cron, pero todas equivalen a configurarlo en su script.
Enfoque 1:
Establezca cada variable que necesita manualmente en su script.
Enfoque 2:
Fuente su perfil:
. $HOME/.bash_profile
(o. $HOME/.profile
)(Por lo general, encontrará que el archivo anterior generará otros archivos (por ejemplo, ~ / .bashrc -> / etc / bashrc -> /etc/profile.d/*); si no, también puede obtenerlos).
Enfoque 3:
Guarde sus variables de entorno en un archivo (ejecute como el usuario deseado):
Luego importe a través de su script cron:
Enfoque 4:
En algunos casos, puede establecer variables cron globales en
/etc/default/cron
. Sin embargo, existe un elemento de riesgo, ya que se establecerán para todos los trabajos cron.fuente
bash: SHELL=/bin/bash: No such file
Cron crea su propio shell con el uso especificado a través del cual se ejecutará.
Entonces, si desea mantener la misma variable de su usuario, intente ejecutarla con su propio usuario, en lugar de root o cualquier otro usuario.
O
La mejor manera es exportar esas variables en su propio script.
fuente
En RedHat CentOS, puede establecer /etc/rc.d/init.d/functions default PATH para establecer permanentemente. /etc/rc.d/crond llama a funciones cuando comienza.
fuente
Tuve un problema similar en mi AWS. Lo descubrí así
me dio
/usr/bin/local/python3
ubicacióny entonces
fuente