Wenn Sie alle n
Minuten einen Cron ausführen möchten , gibt es je nach Wert von einige mögliche Optionen n
.
n
teilt 60 (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30)
Hier ist die Lösung einfach, indem die /
Notation verwendet wird:
# 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)
# | | | | |
# * * * * * command to be executed
m-59/n * * * * command
Stellt oben n
den Wert dar n
und m
stellt einen Wert dar, der kleiner als n
oder ist *
. Dadurch wird der Befehl minutengenau ausgeführtm,m+n,m+2n,...
n
teilt NICHT 60
Wenn n
60 nicht geteilt wird, können Sie dies mit cron nicht sauber machen, aber es ist möglich. Dazu müssen Sie einen Test in das Cron einfügen, in dem der Test die Zeit überprüft. Dies geschieht am besten, wenn Sie sich den UNIX-Zeitstempel ansehen, die Gesamtzahl der Sekunden seitdem 1970-01-01 00:00:00 UTC
. Nehmen wir an, wir möchten den Befehl zum ersten Mal ausführen, wenn Marty McFly in Riverdale ankommt, und ihn dann alle n
Minuten später wiederholen .
% date -d '2015-10-21 07:28:00' +%s
1445412480
Damit ein Cronjob jede 42
Minute nach "2015-10-21 07:28:00" ausgeführt wird, sieht der Crontab folgendermaßen 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)
# | | | | |
# * * * * * command to be executed
* * * * * minutetestcmd "2015-10-21 07:28:00" 42 && command
mit minutetestcmd
definiert als
#!/usr/bin/env bash
starttime=$(date -d "$1" "+%s")
# return UTC time
now=$(date "+%s")
# get the amount of minutes (using integer division to avoid lag)
minutes=$(( (now - starttime) / 60 ))
# set the modulo
modulo=$2
# do the test
(( now >= starttime )) && (( minutes % modulo == 0 ))
Anmerkung: Die UNIX-Zeit wird nicht durch Schaltsekunden beeinflusst
Bemerkung: cron
hat keine Genauigkeit von weniger als einer Sekunde