Cron Ausdruck läuft am 6., 7. und 8. Werktag

546
user3087291

Ich baue einen Cron-Ausdruck, der alle 30 Minuten nur an verschiedenen Geschäftstagen ausgeführt werden muss, z. B. am 6., 7. und 8. Werktag eines Monats.

Derzeit habe ich einen Cron-Ausdruck, der jedoch nur am 6., 7. und 8. Tag des Monats läuft, unabhängig davon, ob es sich um einen Geschäftstag handelt oder nicht.

Aktueller Cron-Ausdruck - 0 0/30 * 6-8 *?

Ich habe es mit dem nächstgelegenen Arbeitstagausdruck 0 0/30 * 6W * versucht ? Aber es funktioniert nicht für eine Reihe von Tagen - wie von 6W-8W .

Jede Hilfe in dieser Hinsicht wird sehr geschätzt.

PS: Ich schaue nicht nach einem Skript.

0
Könnten Sie besser formatieren? Toto vor 6 Jahren 0

1 Antwort auf die Frage

0
Ярослав Рахматуллин

Sie können nicht (oder zumindest bin ich nicht klug genug, um zu sehen, wie).

Es gibt Einschränkungen in der Cron-Registerkarte, mit denen Sie Tag des Monats und Wochentags auswählen können .

Alle Arbeitstage wären Tag der Woche 1-5, aber das reicht nicht aus, weil Sie zählen oder ausdrücken müssen

6th, 7th, 8th day of (days-of-week:1-5) in this month 

Du brauchst also ein Skript.

$ cat /home/jaroslav/tmp/workday-567.sh #!/bin/bash  jan01() { date +%s -d `date +%Y-01-01`; } december() { echo $(($(jan01) + 365*24*3600)); } day=`jan01`; december=`december`;  today=$  this_months_678th=$( while [ $day -lt $december ];do date '+%Y-%m-%d %B %A %u' -d@$day; let day=$day+86400;  done | sort -u | sed -e "/[67]$/d; /$(date '+%Y-%m')/!d" | sed -n -e '6p; 7p; 8p' )  if echo -e "$this_months_678th" | grep -q $today; then exit 0 fi exit 1 

November 2018;

$ for i in 2018-11-;  do bash /home/jaroslav/tmp/workday-567.sh $i && echo run on $i; done  run on 2018-11-08 run on 2018-11-09 run on 2018-11-12 
Wie wäre es mit "6W", um den nächsten Arbeitstag nach dem 6. zu erhalten? Führen Sie ein Skript aus, um einen Crontab-Eintrag "* * / 30 *? * * * / script" hinzuzufügen und einen Eintrag hinzuzufügen, um diese Crontab in 3 Tagen zu entfernen. Scheint einfacher. Sie können eine Datei in /etc/cron.d/ einfügen, anstatt crontab zu analysieren. pbhj vor 5 Jahren 0