Hinzufügen einer zufälligen Verzögerung für einen Linux-Befehl

13

Ich benutze func , um parallele Befehle auf unseren Servern auszuführen.

Neulich hatten wir ein Problem, als ein Neustart von puppetvia funcalle unsere Server gleichzeitig traf puppetmaster.

Meine Frage: Wie kann ich denselben exakten Befehl auf einer Reihe von Servern ausführen, während ich eine Verzögerung hinzufüge, bevor er auf den einzelnen Servern ausgeführt wird?

Z.B: random_delay && service puppet restart

Ich interessiere mich für den random_delayTeil des Befehls.

Belmin Fernandez
quelle

Antworten:

25

sleep $((RANDOM % MAXWAIT)) wobei MAXWAIT die maximal gewünschte Verzögerung in Sekunden ist.

S19N
quelle
Scheint viel auf "1" zu stecken, wenn Sie das wiederholen ... Gedanken?
Corey S.
Bemerkte dies auch. Versuchen Sie dies für x in 1 2 3 4 5; do RANDOM = $ x; i = $ ((RANDOM% 10)); echo $ i; schlaf $ i; Es ist offensichtlich, dass MAXWAIT in der Antwort von S19N in etwa 10 in meiner Antwort entspricht. Ändern Sie den RANDOM-Startwert und fügen Sie den gewünschten Marionettencode hinzu.
dtbnguyen
2
@CoreyS. $ RANDOM setzt den letzten Wert außer Kraft, daher die Schleife (ich bin am 6. 5., 7. 2. und 5. festgefahren). sleep $((RANDOM % MAXWAIT))ist der richtige Weg. Ich werde die Antwort als solche bearbeiten.
Jeff Ferland
Dies wird in Pro Puppet als Spreizung bezeichnet . Es wird verwendet, um eine donnernde Herde zu verhindern , in der viele Maschinen gleichzeitig dasselbe tun. Darüber hinaus hatte ich Erfolg mit Cron Scheduling mit fqdn_rand.
François Beausoleil
Dies scheint von bash-spezifischen Erweiterungen abzuhängen. In dash echo sleep $((RANDOM % 900))Rückkehr sleep 0. Dies bedeutet, dass die Verwendung in #!/bin/shSkripten oder an Orten wie crontab nicht sicher ist . (Die Probleme scheinen dashdas nicht zu verstehen $RANDOM)
Gert van den Berg
1

Ich mag die innovative, aber nicht ideale Lösung von S19N. Ich sage nur, es ist weniger als ideal, da es immer noch weitgehend nicht deterministisch ist, wann tatsächlich etwas passieren wird. Ich würde viel lieber garantieren können, wann etwas passieren wird und was dann passiert.

Puppet Orchestration ist eigentlich ein hartes Problem.
Eine der "Best-Practice" -Lösungen ist die Verwendung von MCollective, mit dem Sie nicht nur konfigurieren können, wann Puppet auf Ihrem Maschinencluster ausgeführt wird, sondern auch für andere ähnliche Orchestrierungsprobleme.

Tom O'Connor
quelle