2009-04-01 6 views

Respuesta

-1

No, afaik, no puedes hacer eso.

Los campos cron contienen los valores de minutos, horas, día del mes, mes y día de la semana, respectivamente.

10 5 10 * * means run at 5:10 on every 10th of every month. 

10 5 * 12 * means run at 5:10 on every day in december 

10 5 * * 1 means run at 5:10 every Monday 

Puede hacer que se ejecute en una serie de meses específicos, ya que el formato crontab acepta rangos. Abril a diciembre sería 4-12 en ese caso para el campo del mes. Pero eso no tiene en cuenta su deseo de tener esto limitado a 2009.

No hay ningún mecanismo para establecer las fechas de inicio y detención de cronjob. Siempre puedes escribir esto por supuesto. Haga que cronjob se ejecute todos los días y verifique que la fecha actual sea anterior al 30/12. Si es 31/12, haz que se elimine solo. O algo más pensado.

Un crontab de

0 7 * * 6-12 command_X 

haría lo que quiere parcialmente, pero que comenzaría a funcionar 1 de junio y hasta el 31 de diciembre. Saltarse la primera parte de junio y el 31 de diciembre tendría que estar escrito en el comando X.

14

Es puede hacerse de una manera complicada.

se necesitan tres separados cron puestos de trabajo para ese rango, todos corriendo el mismo código (X en este caso):

  • uno para el 29 y 30 de junio ("0 7 29,30 6 * X").
  • uno por cada día en los meses de julio a noviembre ("0 7 * 7-11 * X").
  • uno para todos, pero el último día de diciembre ("0 7 1-30 12 * X").

Esto le da:

# Min Hr DayOfMonth Month DayOfWeek Command 
# --- -- ---------- ----- --------- ------- 
    0  7  29,30  6  *   X 
    0  7   *  7-11  *   X 
    0  7  1-30  12  *   X 

a continuación, asegúrese de comentar a cabo tarde del 29 junio, 2010 viene alrededor.Puede agregar un trabajo final de cron el 31 de diciembre para enviarle un correo electrónico que necesita ser deshabilitado.

O usted podría modificar X de inmediato si el año no es 2009.

if [[ "$(date +%Y)" != "2009" ]] ; then 
    exit 
fi 

Entonces no importará si se olvida de desactivar los puestos de trabajo.

4

Sí, principalmente. Algunas implementaciones de cron tienen soporte durante años, otras no, por lo que asumiremos que las tuyas no. Además, asumo que este trabajo solo lo está ejecutando cron daemon, por lo que podemos usar el bit de ejecución para determinar si cron debe ejecutar el trabajo o no.

Tenga en cuenta que deberá dejar la secuencia de comandos como no ejecutable hasta el momento en que desee que se ejecute.

Las siguientes expresiones cron harán lo que quieran (todos los días, incluidos los fines de semana). Ajuste lo que necesite:

# Make the job executable on 29 June. 
0 6 29 6 * chmod +x /path/to/my/job/script 

# Run the job between June and December, only if it's executable. 
0 7 * 6-12 * test -x /path/to/my/job/script && /path/to/my/job/script 

# Disable execution after 30 December. 
0 8 30 12 * chmod -x /path/to/my/job/script 
2

Normalmente soy un fan de mantener la lógica con el programa que se está ejecutando. Puede pensar en configurar un trabajo de cron que ejecute el script todos los días, luego haga que el script decida por sí mismo si debe o no hacer algo útil. Cuando haya pasado el último día útil (30 de diciembre), su script podría eliminarse del crontab. En el script puede configurar la lógica con todos los comentarios necesarios para describir lo que está haciendo y por qué.

Si su trabajo es un programa binario, puede configurar un run_script que haga que este trabajo de filtrado de programación funcione antes de llamar al programa.

+1

Tendría que estar en desacuerdo, aunque depende ligeramente de si se supone que el programa servirá para un propósito distinto a cuando se ejecuta a través de cron (y los geeks de Unix sí lo hacen). Si sirve para un propósito general, entonces construir en un arcano conjunto de reglas para decidir cuándo se debe ejecutar o analizar un archivo de configuración es una exageración seria y no recomendada (a menos que, tal vez, ya tenga herramientas en su biblioteca para hacer el comprobación). ¡Es mucho mejor dejar que 'cron' o una variante se ocupen de eso! –

+0

En realidad, estaba buscando la manera de hacer funcionar un cron hasta una fecha de vencimiento, tal vez creando un segundo trabajo para eliminar ambos, hasta que coloreé sus palabras sobre "el guión decide por sí mismo si debería o no hacer algo útil". En lugar de crear muchos trabajos, crearé uno para llamar a mi script todos los días y decidirá si hay algo que hacer. – StackUnder

Cuestiones relacionadas