Exécuter le travail Cron toutes les N minutes plus décalage

251

*/20 * * * *

S'assure qu'il s'exécute toutes les 20 minutes, je voudrais exécuter une tâche toutes les 20 minutes, à partir de 5 heures, est-ce possible avec Cron? Serait-ce:

5/20 * * * * ?

AJP
la source
10
Merci aux Babyloniens, qui ont décidé que notre système de temps devrait être exactement divisé par 1,2,3,4,5 et 6.
arivero
3
s'il est divisible par 2 et 3, il est également divisible par 6
Ziofil

Réponses:

514

Pour exécuter une tâche toutes les 20 minutes à partir de 5 heures, essayez ceci:

 5-59/20 * * * *

Explication

Un *champ dans les minutes est le même que celui 0-59/1où se 0-59trouve la plage et 1l' étape . La commande s'exécutera à la première minute de la plage (0), puis à toutes les minutes successives éloignées de la première par étape (1), jusqu'à la dernière (59).

C'est pourquoi */20 * * * *s'exécutera à 0 minute, 20 minutes après et 40 minutes après - ce qui est le même que toutes les 20 minutes. Cependant, */25 * * * *s'exécutera à 0 minute, 25 minutes après et 50 minutes après - ce qui n'est pas le même que toutes les 25 minutes. C'est pourquoi il est généralement souhaitable d'utiliser une valeur de pas dans le champ minute qui se divise également en 60.

Ainsi, pour compenser l'heure de début, spécifiez la plage de manière explicite et définissez la première valeur sur la quantité de décalage.

Exemples

5-59/20 * * * * s'exécutera 5 minutes après, 25 minutes après et 45 minutes après.

10-59/25 * * * * se déroulera 10 minutes après et 35 minutes après.

1-59/2 * * * * s'exécutera toutes les minutes impaires.

toxalote
la source
3
cela fonctionne parfaitement. Comment avez-vous découvert cela? Pouvez-vous me diriger vers les documents? Merci.
AJP
12
Une variété de recherches Google m'a conduit à cette réponse de panne de serveur . Il y avait une erreur qui m'avait vraiment confus, d'autant plus que d'autres résultats suggéraient que le module de minutes devrait être égal à zéro . J'ai finalement trouvé cette page de manuel qui m'a donné la réponse. En conséquence, j'ai pu commenter la réponse de panne de serveur qui a maintenant été corrigée. Je ne me souviens pas des termes de recherche réels que j'ai utilisés pour trouver la page IBM.
toxalot
3
Merci et très bon travail @toxalot, je souhaite que nous puissions vous décerner le badge "Tireless Investigator"! : P
AJP
5
LOL. J'avais besoin d'exécuter un travail toutes les 10 minutes (compensé par 5) et je ne voulais vraiment pas utiliser une liste délimitée par des virgules, alors j'étais déterminé à trouver la réponse.
toxalot
2
CPanel ne semble pas aimer ça malheureusement :(
Robert Went
53

Sûr!

5,25,45 * * * * /your/cron
fedorqui 'SO arrête de nuire'
la source
2
Merci. J'avais fini par le faire, j'espérais qu'il pourrait y avoir une solution plus élégante.
AJP
13
Parfois, la solution simple est meilleure car elle est facile à lire et à comprendre. J'aime savoir que 5-59/20c'est possible, mais 5,25,45a l'avantage que c'est immédiatement très clair ce que cela fait.
thomasrutter
2
seulement si votre pas est assez grand
Tebe
3
Ceci est un bien meilleur exemple. Il faut 0 charge cognitive pour comprendre quand le travail démarre.
Dylan Pierce
11

Tu peux essayer: */5 * * * * sleep N; your job

Leo Chu
la source
4
Je ne vois rien de mal à cela - en fait, cela est très similaire à la façon dont le travail cron de certbot réalise un décalage aléatoire qui aide à maintenir la charge du serveur équilibrée. ne mérite certainement pas tous ces
votes négatifs
6
Cela m'a fait me demander comment dormir un nombre aléatoire de secondes. sleep `shuf -i 1-100 -n 1`fait l'affaire.
Laizer
bon sang, @Laizer tu m'as fait réapprendre quelque chose! (merci!)
UncaAlby