Cronjob läuft vor der geplanten Zeit, was könnte falsch sein?

10

Ich habe unten Crontab für Samstag geplant, der zwischen den Tagen 19-23 fällt, ich bin nicht sicher, warum es am 20. (Freitag) lief. Irgendwelche Ideen?

00 21 19-23 * 6 <command>
simer
quelle
1
Vielleicht finden Sie Inspiration in /etc/cron.d/mdadmUbuntu und Debian. So läuft es jeden ersten Sonntag im Monat:57 0 * * 0 root if [ -x /usr/share/mdadm/checkarray ] && [ $(date +\%d) -le 7 ]; then /usr/share/mdadm/checkarray --cron --all --idle --quiet; fi
Kasperd
danke kasperd, 0 18 * * 6 [date +\%d -le 07] && <task> funktioniert gut für mich, wo es erforderlich ist, jeden ersten Samstag im Monat zu laufen.
Simer

Antworten:

16

Dieser Cron-Ausdruck bedeutet:

At 21:00 on the 19, 20, 21, 22 and 23rd of every month and every Saturday.

Deshalb wurde cron ausdrücklich angewiesen, am Freitag, dem 20., zu rennen. Das ist wegen:

When the schedule specifies both date and weekday, they're combined with a logical OR,
i.e. the job will run if current_minute == scheduled_minute 
&& current_hour == scheduled_hour && current_month == scheduled_month && 
(current_day == scheduled_date OR current_weekday == scheduled_weekday).

Diese Informationen stammen aus diesem praktischen Cron-Tool: http://crontab.guru/

Damit Ihr Job an bestimmten Tagen ausgeführt wird, an denen es Samstag ist, können Sie Folgendes verwenden:

00 21 19-23 * * test $(date +%u) -eq 6 && command

Diese Lösung ist von Crontab Wochentag gegen Tag des Monats?

Madoc Comadrin
quelle
6
Beachten Sie, dass dies %bei Cronjobs eine besondere Bedeutung hat - es trennt den Standard des Befehls.
Benutzer1686