2010-09-03 23 views
39

¿Cómo puedo almacenar variables en mi crontab? Me doy cuenta de que no es shell, pero digo que quiero tener algunas constantes como una ruta a mi aplicación o algo así.Variables en crontab?

¿Pensamientos?

Respuesta

68

En Vixie cron, que es posiblemente el más común, puede hacer esto casi exactamente como un script de shell.

VARIABLE=value 
PATH=/bin:/path/to/doathing 
0 0 * * * doathing.sh $VARIABLE 

La página del manual dice:

una línea activa en un crontab será o bien un ajuste del entorno o un comando cron. Una configuración del entorno es de la forma,

 name = value 

donde los espacios alrededor del signo igual (=) son opcionales, y los espacios no conducen posteriores en el valor será parte del valor asignado a nombre. La cadena de valor se puede colocar entre comillas (simple o doble, pero coincidente) para conservar los espacios en blanco iniciales o finales. La cadena de caracteres también se puede colocar entre comillas (simple o doble, pero a juego) para conservar los espacios en blanco iniciales, finales o posteriores.

Puede ver si tiene Vixie cron consultando la página de manual de crontab; el autor será Paul Vixie. Diferentes crones pueden o no soportar esto (el cron de BusyBox, por ejemplo, no), en cuyo caso su mejor opción es envolver su comando en un script de shell y ejecutar ese script desde cron en su lugar. De hecho, esto es algo bueno que hacer para cualquier cosa complicada.

+3

+1 Esa es la respuesta –

+0

Regresé para ver esta pregunta que hice hace 3 años. Es curioso cómo van las cosas, ¿eh? –

+12

Esta publicación es engañosa: cron solo admite un conjunto específico de variables que se establecen en la tabla cron; p.ej. INICIO, MAILTO, SHELL, etc. Usted * no puede * establecer variables personalizadas, p. FOO =/foo/dir. Pensé que publicaría esto ya que este mensaje me llevó por el camino equivocado durante un par de horas. – Jmoney38

-8

No soy un tipo unix, así que no puedo decir nada definitivo, pero este parece ser un buen lugar para un paso previo al procesado.

#define cmdpath /usr/bin/myfolder/cmd 
0,30 8-17 * * 1-5 cmdpath 
17 3 * * 1 cmdpath 

corriendo a través de mi C++ preprocesador del compilador da como:

0,30 8-17 * * 1-5 /usr/bin/myfolder/cmd 
17 3 * * 1 /usr/bin/myfolder/cmd 

que parece justo lo que quería.

+11

Cuando todo lo que tiene es un martillo, cada problema parece un clavo. –

+2

Eso convierte el proceso relativamente fácil de editar un crontab con 'crontab -e' en un proceso de tres pasos para editar su crontab, invocar cpp e instalar el nuevo crontab con crontab $ filename – mkb

+0

@Matt: a) eso es lo que son los guiones de shell para yb) pero 'crontab -e' no hace lo que quiere, por lo que no es realmente una respuesta. –

2

Puede poner variables de entorno en el crontab. Consulte la página del manual para crontab(5) para obtener más detalles.