crontab día de la semana frente a día del mes?

14

Agregué esto a / etc / crontab en algunos sistemas linux y freebsd diferentes:

# monthly reboot: 3rd Tuesday of every month
56 07 15-21 * 2 root /sbin/shutdown -r now

Quiero reiniciar el 3er MARTES de cada mes. Sin embargo, todos los sistemas se reiniciaron el 3er miércoles de este mes (el 19).

¿Qué estoy haciendo mal?

Actualización : Gracias a la respuesta de Ranon a continuación, parece que la revisión a continuación funcionará, ¿alguien puede confirmar o hay una forma aún mejor de hacerlo?

# monthly reboot: 3rd Tuesday of every month
56 07 15-21 * * root test $(date +\%u) -eq 2 && /sbin/shutdown -r now
ane
fuente

Respuestas:

16

Echa un vistazo a man 5 crontab.

Nota: El día de ejecución de un comando puede especificarse mediante dos campos: día del mes y día de la semana. Si ambos campos están restringidos (es decir, no *), el comando se ejecutará cuando cualquiera de los campos coincida con la hora actual. Por ejemplo, `` 30 4 1,15 * 5 '' haría que un comando se ejecute a las 4:30 a.m.del 1 y 15 de cada mes, más todos los viernes. Sin embargo, se puede lograr el resultado deseado agregando una prueba al comando (ver el último ejemplo en EJEMPLO DE ARCHIVO DE CRONTA a continuación).

Por lo tanto, sus servidores deben reiniciarse todos los días del 15 al 21 y cada martes.

Eche un vistazo al ejemplo de las páginas de manual:

# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +%u) -eq 6 && echo "2nd Saturday"
Jens Erat
fuente
66
Esto realmente parece un error de diseño. Si quisiera todos los días del 15 al 21 y cada martes, haría dos entradas de crontab separadas. Tener que recurrir a una prueba por separado es un truco feo. Dicho esto, ¡gracias por proporcionar una solución!
Laurence Gonsalves