Aggiunta di un ritardo casuale per un comando Linux


13

Sto usando func per eseguire comandi paralleli sui nostri server.

L'altro giorno, abbiamo avuto un problema quando un riavvio di servizio di puppetvia funcha colpito tutti i nostri server puppetmastercontemporaneamente.

La mia domanda: come posso eseguire lo stesso comando esatto su un set di server aggiungendo un ritardo prima che venga eseguito sui singoli server?

Per esempio: random_delay && service puppet restart

Sono interessato alla random_delayparte del comando.

Risposte:


25

sleep $((RANDOM % MAXWAIT)) dove MAXWAIT è il ritardo massimo desiderato in secondi.


Sembra rimanere bloccato su "1" molto se lo riecheggi ... Pensieri?
Corey S.

Ho notato anche questo. Prova questo, per x in 1 2 3 4 5; do RANDOM = $ x; i = $ ((RANDOM% 10)); echo $ i; dormire $ i; done Ovviamente, MAXWAIT nella risposta di S19N è simile in effetti a 10 nella mia risposta. Cambia il seme RANDOM e aggiungi il codice fantoccio a quello che desideri, ovviamente.
Dtbnguyen,

2
@CoreyS. $ RANDOM sta eseguendo il seeding dell'ultimo valore, quindi il looping (mi sono bloccato su 5/6/7, 2/7 e 5). sleep $((RANDOM % MAXWAIT))è il modo corretto. Modificherò la risposta in quanto tale.
Jeff Ferland,

Questo è chiamato splay in Pro Puppet. È usato per prevenire un branco di tuoni , dove molte macchine stanno facendo la stessa cosa contemporaneamente. Oltre a questo, ho avuto successo con la pianificazione cron usando fqdn_rand.
François Beausoleil,

Questo sembra dipendere da estensioni specifiche di bash. In dash echo sleep $((RANDOM % 900))cambio sleep 0. Ciò significa che non è sicuro da usare in #!/bin/shscript o luoghi come crontab. (Il problema sembra essere quello dashche non capisce $RANDOM)
Gert van den Berg,

1

Mi piace abbastanza la soluzione innovativa, ma meno che ideale di S19N. Dico solo che è meno che ideale, poiché è ancora in gran parte non deterministico quando le cose accadranno effettivamente. Preferirei di gran lunga essere in grado di garantire quando accadranno le cose e quali cose accadranno quando succede.

L'orchestrazione delle marionette è in realtà un problema difficile .
Una delle soluzioni "best practice" consiste nell'utilizzare MCollective che non solo ti permetterà di configurare quando il burattino viene eseguito sul tuo cluster di macchine, ma puoi anche usarlo per altri problemi di orchestrazione simili.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.