Incluindo um Atraso Aleatório para um Comando Linux

13

Estou usando o func para executar comandos paralelos em nossos servidores.

No outro dia, tivemos um problema quando uma reinicialização do serviço puppetvia funcfazia todos os nossos servidores baterem puppetmasterao mesmo tempo.

Minha pergunta: como posso executar o mesmo comando exato em um conjunto de servidores enquanto adiciono um atraso antes de ser executado nos servidores individuais?

Por exemplo: random_delay && service puppet restart

Estou interessado na random_delayparte do comando.

Belmin Fernandez
fonte

Respostas:

25

sleep $((RANDOM % MAXWAIT)) onde MAXWAIT é o atraso máximo desejado em segundos.

S19N
fonte
Parece ficar muito preso no "1" se você repetir isso ... Pensamentos?
Corey S.
Notei isso também. Tente isso, para x em 1 2 3 4 5; RANDOM = $ x; i = $ ((RANDOM% 10)); eco $ i; dormir $ i; Obviamente, MAXWAIT na resposta da S19N é semelhante em efeito a 10 na minha resposta. Mude a semente ALEATÓRIA e adicione o código do fantoche a tudo que você deseja naturalmente.
precisa saber é o seguinte
2
@CoreyS. $ RANDOM está gerando o último valor, daí o loop (fiquei preso em 5/6/7, 2/7 e 5). sleep $((RANDOM % MAXWAIT))é o caminho correto. Vou editar a resposta como tal.
Jeff Ferland
Isso é chamado de splay no Pro Puppet. É usado para evitar um rebanho estrondoso , onde muitas máquinas estão fazendo a mesma coisa simultaneamente. Além disso, tive sucesso com o agendamento do cron usando fqdn_rand.
François Beausoleil
Isso parece depender de extensões específicas do bash. Em dash echo sleep $((RANDOM % 900))retornos sleep 0. Isso significa que não é seguro usá-lo em #!/bin/shscripts ou locais como o crontab. (Os problemas parece ser que dashnão entende $RANDOM)
van den Berg Gert
1

Gosto bastante da solução inovadora da S19N, mas menos do que a ideal. Só digo que é menos do que o ideal, pois ainda é amplamente não determinístico quando as coisas realmente acontecem. Prefiro garantir quando as coisas vão acontecer e quais vão acontecer quando acontecer.

A orquestração de marionetes é realmente um problema difícil .
Uma das soluções de "melhores práticas" é usar o MCollective, que não apenas permitirá que você configure quando o fantoche é executado em seu cluster de máquinas, mas também pode ser usado para outros problemas semelhantes de orquestração.

Tom O'Connor
fonte