CRON - executado nos dias 1 a 5 durante as semanas 25 a 36

CRON - executado nos dias 1 a 5 durante as semanas 25 a 36

Existe alguma maneira de agendar a execução do CRON:

  • apenas durante as semanas 25 a 36 durante o ano
  • e somente de segunda a sexta (não nos finais de semana)

Isso ocorre por causa das férias de verão, quando as pessoas fazem muitos pedidos de nossos produtos. É muito tedioso alterar as configurações do CRON toda semana. Entendo que @weekly não pode ser combinado com configurações de estrelas, portanto, algo como o seguinte não é uma marcação válida:

* * 1,2,3,4,5 * * @weekly php /app/cmd import >> /logs/cron-offers.log

Responder1

Você deve ser capaz de fazer isso desta maneira:

# m h  dom mon dow   command
* * * * 1-5 /bin/bash -c "if [ `date +%W` -lt 15 ] && [ `date +%W` -gt 11 ]; then php /app/cmd import >> /logs/cron-offers.log; fi"

Coloque o número correto da semana no primeiro e no segundo "[]".

Responder2

Cron é considerado um agendador muito básico e a sintaxe não permite facilmente que um administrador formule programações um pouco mais incomuns. O cron de estoque não tem um número de semana disponível, então você precisa ser criativo.

De acordo com ncal -w 2018as semanas 25-36 é:

    May               June              July              August          September
Mo     7 14 21 28        4 11 18 25        2  9 16 23 30     6 13 20 27       3
Tu  1  8 15 22 29        5 12 19 26        3 10 17 24 31     7 14 21 28       4
We  2  9 16 23 30        6 13 20 27        4 11 18 25     1  8 15 22 29       5
Th  3 10 17 24 31        7 14 21 28        5 12 19 26     2  9 16 23 30       6
Fr  4 11 18 25        1  8 15 22 29        6 13 20 27     3 10 17 24 31       7
Sa  5 12 19 26        2  9 16 23 30        7 14 21 28     4 11 18 25      1   8
Su  6 13 20 27        3 10 17 24        1  8 15 22 29     5 12 19 26      2   9
   18 19 20 21 22    22 23 24 25 26    26 27 28 29 30 31 31 32 33 34 35  35  36 

Uma abordagem é criar vários lotes que combinados criam a programação desejada. Por exemplo, primeiro basta selecionar os dias da semana das duas últimas semanas de junho e depois todos os dias da semana de julho e agosto em um segundo trabalho e os primeiros dias de setembro como um terceiro:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |

* * 18,19,20,21,22,25,26,26,28,29 jun * php /app/cmd import >> /logs/cron-offers.log
* * * jul,aug mon,tue,wed,thu,fri       php /app/cmd import >> /logs/cron-offers.log
* * 3-7 9 *                             php /app/cmd import >> /logs/cron-offers.log

Outra opção é simplesmente executar seu lote diariamente e usar a sintaxe mais poderosa de uma linguagem de programação/script adequada para permitir que o próprio processo em lote (ou seja, seu código PHP) determine se ele deve ser executado ou encerrado imediatamente.

informação relacionada