Cron para correr cada 2do miércoles?

9

Necesito encontrar una manera de cronometrar un trabajo para que se ejecute cada segundo miércoles del mes. es posible?


fuente
1
Esta pregunta busca proporcionar una respuesta adecuada.
scurker
1
Sí, pero esa pregunta es sobre Tue, no Wed;) Sin embargo, la respuesta aceptada es inteligente.
edoloughlin
>> Sí, pero esa pregunta es sobre martes, no miércoles;) La respuesta aceptada es inteligente, sin embargo ... ¿qué es tan difícil cambiar de martes a miércoles?
ajreal
0 * * * 3 test $ (date \ +% u) -eq 3 && echo "start run me" prueba esto. no pegó a la respuesta porque una pregunta del trazador de líneas es bastante vaga.

Respuestas:

14

Mi página de manual para crontab (que lamentablemente no puedo encontrar en línea) da el siguiente ejemplo:

# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"

Adaptando esto a sus propósitos ...

0 4 8-14 * *    test $(date +\%u) -eq 3 && job.sh
Hasturkun
fuente
3
Para cualquiera que quiera editar esta respuesta, la razón por la que no solo usa el campo del día de la semana es que si tanto el día del mes como el día de la semana están restringidos (es decir, no lo están *), el comando se ejecutará cuando cualquiera coincida .
Hasturkun
página de manual de
Marco Biscaro
1
Descubrí que tenía que escapar del% u, así que:date +\%u
Antony D'Andrea
3

Puede evitar ejecutar un script externo utilizando una combinación del truco del día de la semana más el día de la semana:

# Run on every second Wednesday of the month
0 4 8-14 * Wed job.sh

Esto también evita ejecutar otro programa externo. El 8-14 selecciona todos los días que coinciden con la segunda semana del mes. Luego se filtra solo ese miércoles.

Kyle Berger
fuente
1

No es posible usar cron por sí solo, pero puede llamar a un script una vez por semana que haga la prueba:

En crontab, ejecute second_wed.sh a las 12.00 todos los miércoles:

0 12 * * 3 /home/you/bin/second_wed.sh

En second_wed.sh:

#!/usr/bin/env bash
day_of_month=`date +"%
if [ $day_of_month -gt 7 -a $day_of_month -lt 15 ]; then
  # Call your program here instead of 'ls'…
  ls
fi
edoloughlin
fuente
1

Según esta respuesta, podría hacer:

00 12 * * Wed expr `date +\%d` \> 7 \& `date +\%d` \< 15 >/dev/null && runJob.sh
Comunidad
fuente
1

Para los servidores CentOS 7, esta parece ser la sintaxis que funciona para mí. Tenga en cuenta los espacios alrededor de [y ]. Me tomó un tiempo entenderlo.

Esto ejecuta el test.sharchivo a las 13:07 / 1:07 PM del segundo miércoles del mes. (0 = domingo, 1 = lunes, 2 = martes, 3 = miércoles, etc.)

07 13 8-14 * * [ `date +\%u` = 3 ] &&  /root/scripts/test.sh
eglescout
fuente