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 2018
Woche 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.