Como eu formato estas duas instruções cron complexas?

4

Eu preciso de duas declarações cron específicas:

  1. Uma entrada cron que seria executada na segunda segunda-feira de cada mês a cada 4 horas, começando às 02:00 e executando o arquivo /opt/bin/cleanup.sh

  2. Uma entrada do cron que seria executada às 18:15 no terceiro dia de cada mês que termina em um "r" que executa /opt/bin/verrrrrrrry.sh

Já experimentei vários testadores do cron:

cron verificador , cron tester e tradutor cron

no entanto, nenhum deles parece ser capaz de lidar com expressões cron avançadas (ou eu não sei como formatar a expressão correta), como declarado em

o tutorial de ativação do cron e wikipedia

Como posso verificar minhas instruções do cron? Obviamente, não posso esperar que o evento real passe, para que o daemon possa executá-los.

Existe um bom testador cron que suporte expressões avançadas? Ou como fazer o daemon do cron analisar a expressão ou como codificar essas expressões?

O que eu tenho até agora para essas declarações é:

  1. 0 2 * * 0#2 /opt/bin/cleanup.sh
  2. 15 18 3 * * /opt/bin/verrrrrrrry.sh

Mas é claro que isso não está correto.

Para o número 1, não sei como especificar a "segunda-feira segunda" nem "a cada 4 horas", mas ainda a partir das 02:00.

Para o nº 2, não tenho ideia de como especificar apenas meses terminando em um 'r', exceto codificando-os manualmente. Nem sei como especificar o terceiro dia.

    
por rivanov 02.04.2015 / 23:01

3 respostas

5

Para que algo seja executado somente na segunda segunda-feira do mês, o valor do dia da semana precisa ser 1 e o valor do dia do mês deve ser 8-14, a hora deve ser 2,6,10,14, 18,22 e o minuto 0. No entanto, como dhag comentou corretamente e forneceu uma solução para, quando você especifica o dia da semana e o dia do mês (ou seja, não como * ), o programa é executado quando uma das duas combinações. Portanto, você precisa testar explicitamente para qualquer um, e o dia da semana é mais fácil:

 0 2,6,10,14,18,22 8-14 * * test $(date +\%u) -eq 1 && /opt/bin/cleanup.sh

O final 1 determina a segunda-feira e o intervalo do dia do mês (8-14) seleciona apenas quando é a segunda segunda-feira.

O terceiro dia de cada mês terminando em um "r" às 18:15:

 15 18 3 september,october,november,december * /opt/bin/verrrrrrrry.sh

(pelo menos no Vixie cron você pode usar os nomes dos meses. Se o seu não suporta isso você pode substituir por 9-12 )

    
por 02.04.2015 / 23:28
2

O formato é minuto / hora / dia do mês / mês / dia da semana

Então isso faria

0 4 9-15 * 2 /opt/bin/cleanup.sh e

15 18 3 8-14 * /opt/bin/verrrrrrrry.sh

    
por 02.04.2015 / 23:23
1

Uma entrada cron que seria executada na segunda segunda-feira de cada mês a cada 4 horas, começando às 02:00

00 02/4 8-14 * * [ 'date +\%u' = 1 ] && /opt/bin/cleanup.sh
  • http://crontab.guru/#00_02/4_8-14_*_1

Uma entrada do cron que seria executada às 18:15 no terceiro dia de cada mês que termina em um "r"

15 18 3 9-12 * /opt/bin/verrrrrrrry.sh
  • http://crontab.guru/#15_18_3_9-12_*
por 25.12.2015 / 10:59

Tags