16 votos

¿Es posible utilizar variables en crontab -e?

Puedo decirlo:

MYPATH=/root/scripts
MYSCRIPT=doit.sh

0 1 * * * $MYPATH/$MYSCRIPT

en crontab -e ?

¿Es posible utilizar variables en crontab -e?

19voto

Gilles Puntos 37591

Sí, se pueden definir y utilizar variables de esta manera. Hay una limitación (que no has tocado en tus ejemplos): la cadena a la derecha del = se interpreta literalmente, eliminando los espacios iniciales, por lo que no se pueden utilizar construcciones como FOO=$BAR/qux (por ejemplo PATH=$HOME/bin:$PATH no hará nada útil).

Esto se indica en la documentación, que se puede ver ejecutando

man 5 crontab

(Tenga en cuenta que man crontab muestra la documentación del crontab comando en la sección 1 del manual; quiere la documentación del crontab formato de archivo en la sección 5.)

10voto

cYrus Puntos 10811

Acabo de hacer un intento, sí es posible. Puedes averiguarlo con este sencillo ejemplo, pon esto en tu crontab :

FOO=qwerty
\* \* \* \* \* echo $FOO > ~/out

Y comprueba el archivo ~/out (actualizado cada minuto), debe contener "qwerty" .

7voto

D French Puntos 41

Aunque los crontabs de Linux admiten la definición de algunas variables que contienen valores literales, no son muy útiles más allá de la condensación de un texto largo en una representación más corta o el control de algunas cosas sobre el propio cron, como dónde enviar la salida del correo electrónico.

La flexibilidad es entender que la parte del comando de la entrada de cron se pasará a /bin/sh -c o el Shell definido con SHELL en los sistemas que utilizan Vixie cron (el que suele instalarse en los sistemas Linux). Lo que esto significa es que el resto de la línea de comandos es un simple Shell ShellscriptShell. NOTA: date cuenta de que se está utilizando Shell. En Linux /bin/sh es normalmente /bin/bash por lo que el $( ... ) funciona, pero no lo haría en sistemas más antiguos en los que /bin/sh sólo entiende ` en su lugar.

Por ejemplo, tengo una simple línea crontab que archiva un archivo MBX de mensajes guardados mensualmente y lo comprime. Tiene el siguiente aspecto:

15 0 1 * *  nf=MailFeed-$( date +\%Y\%m ).mbx && cd Logs && mv MailFeed.mbx $nf && bzip2 -9 $nf

Esto ejecutará el primero de cada mes a las 12:15 AM, establecerá un nuevo nombre de archivo con CCYYMM en él, moverá el archivo actual al nuevo nombre y lo comprimirá. Lo que hay que recordar es que un % (signo de porcentaje) se tratará como una nueva línea y los datos que la siguen se enviarán como stdin al comando que precede al signo de porcentaje. Por ello, el comando normal date +Y+m se escribe como date +\%Y\%m arriba.

-2voto

klm123 Puntos 253

No se puede, un cronjob sólo puede contener elementos de cron. ¿No es una opción crear un bash-script y ejecutar el bash-script mediante un cronjob?

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: