CRON - Ausführung an den Tagen 1-5 während der Wochen 25 - 36

CRON - Ausführung an den Tagen 1-5 während der Wochen 25 - 36

Gibt es eine Möglichkeit, die Ausführung von CRON zu planen:

  • nur in den Kalenderwochen 25 - 36 im Jahr
  • und nur von Mo - Fr (nicht am Wochenende)

Dies liegt an den Sommerferien, wenn viele Leute unsere Produkte bestellen. Es ist ziemlich mühsam, jede Woche die CRON-Einstellungen zu ändern. Ich verstehe, dass @weekly nicht mit Sterneinstellungen kombiniert werden kann, also ist etwas wie das Folgende kein gültiges Markup:

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

Antwort1

Dies sollte folgendermaßen möglich sein:

# 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"

Tragen Sie in das erste und zweite "[]" Ihre korrekte Wochenzahl ein.

Antwort2

Alles in allem ist Cron ein sehr einfacher Scheduler und die Syntax erlaubt es einem Administrator nicht, etwas ungewöhnlichere Zeitpläne zu formulieren. Standardmäßig verfügt Cron nicht über eine Wochennummer, Sie müssen also kreativ sein.

Nach ncal -w 2018Woche 25-36 lautet es:

    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 

Ein Ansatz besteht darin, mehrere Batches zu erstellen, die zusammen den gewünschten Zeitplan erstellen. Wählen Sie beispielsweise zunächst einfach die Wochentage der letzten beiden Juniwochen und dann alle Wochentage im Juli und August in einem zweiten Job und die ersten Septembertage als dritten aus:

# 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

Eine andere Möglichkeit besteht darin, Ihren Batch einfach täglich auszuführen und die leistungsfähigere Syntax einer richtigen Programmier-/Skriptsprache zu verwenden, damit der Batchprozess (also Ihr PHP-Code) selbst bestimmt, ob er ausgeführt oder sofort beendet werden soll.

verwandte Informationen