dia da semana do crontab vs. dia do mês?

14

Adicionei isso ao / etc / crontab em alguns sistemas linux e freebsd diferentes:

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

Quero reiniciar na terceira terça-feira de cada mês. No entanto, todos os sistemas foram reiniciados na 3ª quarta-feira deste mês (19).

O que estou fazendo de errado?

Atualização : Graças à resposta de Ranon abaixo, parece que a revisão abaixo funcionará, alguém pode confirmar ou existe uma maneira ainda melhor de fazer isso?

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

Respostas:

16

Dê uma olhada man 5 crontab.

Nota: O dia da execução de um comando pode ser especificado por dois campos - dia do mês e dia da semana. Se os dois campos forem restritos (por exemplo, não são *), o comando será executado quando um dos campos corresponder à hora atual. Por exemplo, `` 30 4 1,15 * 5 '' faria com que um comando fosse executado às 4:30 da manhã nos dias 1 e 15 de cada mês, além de toda sexta-feira. Pode-se, no entanto, alcançar o resultado desejado adicionando um teste ao comando (veja o último exemplo no EXEMPLO DE CRON FILE abaixo).

Portanto, seus servidores devem reiniciar todos os dias das 15 às 21 E todas as terças-feiras.

Dê uma olhada no exemplo das 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
fonte
6
Isso seriamente parece um bug de design. Se eu quisesse todos os dias das 15 às 21 E toda terça-feira, faria duas entradas separadas do crontab. Ter que recorrer a um teste separado é um truque feio. Dito isto, obrigado por fornecer uma solução alternativa!
Laurence Gonsalves 10/10