Cron Job, zufälliger Start, aber innerhalb des Zeitrahmens

11

Ich möchte, dass ein Skript jeden Tag einmal täglich ausgeführt wird und jederzeit zwischen 09:00 und 1200
Uhr beginnt. Ich bin mir nicht ganz sicher über die Dash-Syntax. 9-12Bedeutet dies, dass das Skript JEDE Stunde dazwischen ausgeführt wird oder dass es ZUFÄLLIG zwischen startet 9-12? Weil ich letzteres brauche.

little_sg
quelle

Antworten:

7

Ich habe noch nie eine Cron-Implementierung gesehen, mit der ein Job zu einem zufälligen Zeitpunkt ausgeführt werden kann. Es ist eine seltsame Anforderung. Wie in der Dokumentation angegeben, 9-12ist dies eine Abkürzung für 9,10,11,12und bedeutet jede Stunde von 9 bis 12.

Wenn Sie einen Job zu einer zufälligen Zeit ausführen möchten, führen Sie den Job zu Beginn des Intervalls aus und fügen Sie eine zufällige Verzögerung hinzu. Zum Beispiel, um zu einer zufälligen Stunde zwischen 9 und 12 zu laufen:

SHELL=/bin/bash
0 9 * * * sleep $((3600 * (RANDOM % 4))); do_stuff

Beachten Sie, RANDOMdass bash oder ksh erforderlich ist und möglicherweise nicht in der Standard-Shell verfügbar ist.

Wenn Sie zu einer zufälligen Zeit zwischen 9 und 12 mit einer zweiten Auflösung ausgeführt werden möchten, können Sie diese RANDOM % 10800als Verzögerung verwenden. Da sie RANDOMjedoch im Bereich von 0 bis 32676 liegt, besteht eine Tendenz zu Verzögerungen zwischen 0 und 32768% 10800 = 368. Um diese Tendenz zu vermeiden:

SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff
Gilles 'SO - hör auf böse zu sein'
quelle
5
"Es ist eine seltsame Anforderung." Ich stimme dir nicht zu. Viele Anwendungen, insbesondere solche, die regelmäßig bei einem Server einchecken müssen (z. B. Paketmanager oder Konfigurationsverwaltungsclients), müssen ihre Ausführungszeiten verlängern, um eine donnernde Herdensituation zu vermeiden . Tatsächlich sind in vielen solchen Anwendungen Spreizoptionen integriert (z. B. --randomwaitArgument zu Yum oder --splayArgument zu Chef-Client). Für diejenigen, die dies nicht tun, wäre eine zufällige Ausführungszeit eine hilfreiche Funktion in einem Job Scheduler.
Jayhendren