Si vous souhaitez exécuter un cron toutes les n
minutes, il existe quelques options possibles en fonction de la valeur de n
.
n
divise 60 (1, 2, 3, 4, 5, 6, 10, 12, 15, 20, 30)
Ici, la solution est simple en utilisant la /
notation:
# 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
Dans ce qui précède, n
représente la valeur n
et m
représente une valeur inférieure à n
ou *
. Cela exécutera la commande aux minutesm,m+n,m+2n,...
n
ne divise PAS 60
Si n
ne divise pas 60, vous ne pouvez pas le faire proprement avec cron, mais c'est possible. Pour ce faire, vous devez mettre un test dans le cron où le test vérifie l'heure. Cela est mieux fait lorsque vous regardez l'horodatage UNIX, le nombre total de secondes depuis 1970-01-01 00:00:00 UTC
. Disons que nous voulons commencer à exécuter la commande la première fois lorsque Marty McFly est arrivé à Riverdale, puis la répéter toutes les n
minutes plus tard.
% date -d '2015-10-21 07:28:00' +%s
1445412480
Pour qu'un cronjob s'exécute toutes les 42
nd minutes après `2015-10-21 07:28:00 ', le crontab ressemblerait à ceci:
# 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
avec minutetestcmd
défini comme
#!/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 ))
Remarque: l' heure UNIX n'est pas influencée par les secondes intercalaires
Remarque: cron
n'a pas de précision inférieure à la seconde