Wenn Sie alle nMinuten 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 nden Wert dar nund mstellt einen Wert dar, der kleiner als noder ist *. Dadurch wird der Befehl minutengenau ausgeführtm,m+n,m+2n,...
n teilt NICHT 60
Wenn n60 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 nMinuten später wiederholen .
% date -d '2015-10-21 07:28:00' +%s
1445412480
Damit ein Cronjob jede 42Minute 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 minutetestcmddefiniert 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