Cron job, démarrage aléatoire mais dans les délais
12
Je veux qu'un script s'exécute une fois par jour, tous les jours, à partir de 9
h 9-1200 à 12 h 00. Je ne suis pas complètement sûr de la syntaxe du tiret - cela signifie-t-il que le script s'exécutera TOUTES les heures entre les deux , ou qu'il démarrera ALÉATOIRE entre 9-12? Parce que j'ai besoin de ce dernier.
Je n'ai jamais vu d'implémentation cron qui puisse exécuter un travail à un moment aléatoire. C'est une exigence étrange. Comme l'indique la documentation, 9-12est un raccourci pour 9,10,11,12, et signifie toutes les heures de 9 à 12.
Si vous souhaitez exécuter un travail à une heure aléatoire, exécutez-le au début de l'intervalle et ajoutez un délai aléatoire. Par exemple, pour exécuter à une heure aléatoire entre 9 et 12:
Notez que RANDOMnécessite bash ou ksh, il peut ne pas être disponible dans le shell par défaut.
Si vous souhaitez exécuter à une heure aléatoire entre 9 et 12, avec une deuxième résolution, vous pouvez utiliser RANDOM % 10800comme délai, mais comme il se RANDOMsitue dans la plage 0..32767, il y aura un biais vers les délais entre 0 et 32768% 10800 = 368. Pour éviter ce biais:
SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff
"C'est une exigence étrange." Je ne suis pas d'accord. De nombreuses applications, en particulier celles qui doivent se connecter périodiquement à un serveur (comme les gestionnaires de packages ou les clients de gestion de configuration), doivent réduire leurs temps d'exécution afin d'éviter une situation de troupeau tonitruante . En fait, beaucoup de ces applications ont des options d'affichage intégrées (par exemple, --randomwaitargument à yum ou --splayargument à chef-client), mais pour celles qui ne le font pas, un temps d'exécution aléatoire serait une fonctionnalité utile à avoir dans un planificateur de travaux.
J'ai fini par avoir des exigences similaires pour les scripts python, mais j'ai fini par l'implémenter via le script lui-même, en utilisant les fonctions random + sleep, puis en lançant le travail cron @ midnight
from time import sleep
import random
sleep_time = random.randint(0,7200) #7200 seconds = 2 hours * 60 min * 60 sec
print(sleep_time)
sleep(sleep_time)
--randomwait
argument à yum ou--splay
argument à chef-client), mais pour celles qui ne le font pas, un temps d'exécution aléatoire serait une fonctionnalité utile à avoir dans un planificateur de travaux.J'ai fini par avoir des exigences similaires pour les scripts python, mais j'ai fini par l'implémenter via le script lui-même, en utilisant les fonctions random + sleep, puis en lançant le travail cron @ midnight
la source