Linux komutu için rastgele bir gecikme ekleme


13

Sunucularımızda paralel komutlar gerçekleştirmek için func kullanıyorum .

Geçen gün, puppetüzerinden hizmet yeniden başlatma functüm severs bizim puppetmasteraynı anda vurmak yaptı bir sorun vardı .

Benim sorum: Bireysel sunucularda yürütülmeden önce bir gecikme eklerken aynı komutu bir sunucu kümesinde nasıl yürütebilirim?

Örneğin: random_delay && service puppet restart

random_delayKomuta kısmıyla ilgileniyorum .

Yanıtlar:


25

sleep $((RANDOM % MAXWAIT)) burada MAXWAIT, saniye cinsinden istenen maksimum gecikmedir.


Eđer yankýyorsan "1" e takýlýyor ... Düşünceler?
Corey S.7

Bunu da fark ettim. 1 2 3 4 5'teki x için bunu deneyin; RASTGELE = $ x; i $ = ((RANDOM% 10)); echo $ i; uyku $ i; Açıkçası, S19N'nin cevabındaki MAXWAIT, cevabımdaki 10'a benzer. RANDOM tohumunu değiştirin ve elbette istediğiniz her şeye kukla kodu ekleyin.
dtbnguyen

2
@CoreyS. $ RANDOM son değeri tohumlama, bu nedenle döngü (Ben 5/6/7, 2/7 ve 5 sıkışmış aldım). sleep $((RANDOM % MAXWAIT))doğru yoldur. Cevabı bu şekilde düzenleyeceğim.
Jeff Ferland

Buna Pro Kukla'da yayvan denir . Birçok makinenin aynı şeyi aynı anda yaptığı bir gürleyen sürüyü önlemek için kullanılır . Buna ek olarak, kullanarak cron zamanlama ile başarılı oldu fqdn_rand.
François Beausoleil

Bu, bash'a özgü uzantılara bağlı gibi görünüyor. In dash echo sleep $((RANDOM % 900))getiriler sleep 0. Bu, #!/bin/shkomut dosyalarında veya crontab gibi yerlerde kullanılmasının güvenli olmadığı anlamına gelir . (Sorunlar dashanlamıyor gibi görünüyor $RANDOM)
Gert van den Berg

1

S19N'nin yenilikçi, ancak ideal çözümden daha azını seviyorum. Sadece ideal olandan daha az olduğunu söylüyorum, çünkü işlerin ne zaman gerçekleşeceği hala büyük ölçüde belirleyici değil. Bir şeyin ne zaman olacağını ve ne zaman olacağını ne olacağını garanti etmeyi çok isterim.

Kukla düzenleme aslında zor bir sorundur.
"En iyi uygulama" çözümlerinden biri, yalnızca kukla makine kümenizde çalıştığında yapılandırmanıza izin vermekle kalmayacak, aynı zamanda diğer benzer düzenleme sorunları için de kullanabileceğiniz MCollective kullanmaktır.


0
0 */12 * * * root perl -e 'sleep int(rand(43200))' && service puppet restart

Bu, her 12 saatte bir 0 saniye ile 12 saat (43200 = 12 x 60 x 60) arasında rastgele bir miktar uyur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.