Saltar al contenido

¿Dónde puedo configurar las variables de entorno que usará crontab?

Si encuentras algún problema con tu código o trabajo, recuerda probar siempre en un ambiente de testing antes aplicar el código al proyecto final.

Solución:

Puede definir variables de entorno en el propio crontab cuando se ejecuta crontab -e desde la línea de comandos.

LANG=nb_NO.UTF-8
LC_ALL=nb_NO.UTF-8
# m h  dom mon dow   command

* * * * * sleep 5s && echo "yo"

Esta característica solo está disponible para ciertas implementaciones de cron. Ubuntu y Debian actualmente usan vixie-cron que permite declararlos en el archivo crontab (también GNU mcron).

Archlinux y RedHat usan cronie que no permite que se declaren las variables de entorno y arrojará errores de sintaxis en el cron.log. La solución se puede hacer por entrada:

# m h  dom mon dow   command
* * * * * export LC_ALL=nb_NO.UTF-8; sleep 5s && echo "yo"

Tengo una solución más para este problema:

0 5 * * * . $HOME/.profile; /path/to/command/to/run

En este caso, recogerá todas las variables de entorno definidas en su $HOME/.profile expediente.

por supuesto $HOME tampoco está configurado, debe reemplazarlo con la ruta completa de su $HOME.

Haga que ‘cron’ ejecute un script de shell que establezca el entorno antes de ejecutar el comando.

Siempre.

#   @(#)$Id: crontab,v 4.2 2007/09/17 02:41:00 jleffler Exp $
#   Crontab file for Home Directory for Jonathan Leffler (JL)
#-----------------------------------------------------------------------------
#Min     Hour    Day     Month   Weekday Command
#-----------------------------------------------------------------------------
0        *       *       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/hourly
1        1       *       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/daily
23       1       *       *       1-5     /usr/bin/ksh /work1/jleffler/bin/Cron/weekday
2        3       *       *       0       /usr/bin/ksh /work1/jleffler/bin/Cron/weekly
21       3       1       *       *       /usr/bin/ksh /work1/jleffler/bin/Cron/monthly

Los scripts en ~/bin/Cron son todos enlaces a un solo script, ‘runcron’, que se ve así:

:       "$Id: runcron.sh,v 2.1 2001/02/27 00:53:22 jleffler Exp $"
#
#       Commands to be performed by Cron (no debugging options)

#       Set environment -- not done by cron (usually switches HOME)
. $HOME/.cronfile

base=`basename $0`
cmd=$REAL_HOME:-/real/home/bin/$base

if [ ! -x $cmd ]
then cmd=$HOME/bin/$base
fi

exec $cmd $@:+"[email protected]"

(Escrito usando un estándar de codificación más antiguo; hoy en día, usaría un shebang ‘#!’ al principio).

El ‘~/.cronfile’ es una variación de mi perfil para uso de cron: rigurosamente no interactivo y sin eco por el simple hecho de ser ruidoso. En su lugar, puede hacer arreglos para ejecutar .profile y así sucesivamente. (El material REAL_HOME es un artefacto de mi entorno; puedes fingir que es lo mismo que $HOME).

Entonces, este código lee el entorno apropiado y luego ejecuta la versión no Cron del comando desde mi directorio de inicio. Entonces, por ejemplo, mi comando ‘día de la semana’ se ve así:

:       "@(#)$Id: weekday.sh,v 1.10 2007/09/17 02:42:03 jleffler Exp $"
#
#       Commands to be done each weekday

# Update ICSCOPE
n.updics

El comando ‘diario’ es más simple:

:       "@(#)$Id: daily.sh,v 1.5 1997/06/02 22:04:21 johnl Exp $"
#
#       Commands to be done daily

# Nothing -- most things are done on weekdays only

exit 0

Nos puedes asistir nuestro estudio poniendo un comentario o dejando una valoración te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *