Menambahkan penundaan acak untuk perintah Linux

13

Saya menggunakan func untuk melakukan perintah paralel pada server kami.

Suatu hari, kami memiliki masalah ketika layanan restart puppetvia funcmembuat semua severs kami mengenai kami puppetmasterpada saat yang sama.

Pertanyaan saya: Bagaimana saya bisa menjalankan perintah yang sama persis pada satu set server sambil menambahkan penundaan sebelum dieksekusi pada masing-masing server?

Misalnya: random_delay && service puppet restart

Saya tertarik pada random_delaybagian dari perintah.

Belmin Fernandez
sumber

Jawaban:

25

sleep $((RANDOM % MAXWAIT)) di mana MAXWAIT adalah penundaan maksimum yang diinginkan dalam detik.

S19N
sumber
Tampaknya sering terjebak pada "1" jika Anda menggemakannya ... Pikiran?
Corey S.
Melihat ini juga. Coba ini, untuk x dalam 1 2 3 4 5; do RANDOM = $ x; i = $ ((ACAK% 10)); echo $ i; tidur $ i; dilakukan Jelas, MAXWAIT dalam jawaban S19N serupa efeknya dengan 10 dalam jawaban saya. Ubah seed ACAK dan tambahkan kode boneka untuk apa pun yang Anda inginkan tentu saja.
dtbnguyen
2
@CoreyS. $ ACAK sedang menyemai nilai terakhir, maka perulangan (saya terjebak pada 5/6/7, 2/7, dan 5). sleep $((RANDOM % MAXWAIT))adalah cara yang benar. Saya akan mengedit jawabannya.
Jeff Ferland
Ini disebut splay dalam Pro Puppet. Ini digunakan untuk mencegah kawanan petir , di mana banyak mesin melakukan hal yang sama secara bersamaan. Selain itu, saya berhasil menggunakan penjadwalan cron fqdn_rand.
François Beausoleil
Ini tampaknya tergantung pada ekstensi spesifik bash. Sebagai dash echo sleep $((RANDOM % 900))imbalan sleep 0. Ini berarti tidak aman untuk digunakan dalam #!/bin/shskrip atau tempat-tempat seperti crontab. (Masalahnya tampaknya dashtidak mengerti $RANDOM)
Gert van den Berg
1

Saya sangat menyukai solusi inovatif S19N, namun kurang ideal. Saya hanya mengatakan itu kurang dari ideal, karena sebagian besar masih non-deterministik ketika hal-hal benar-benar akan terjadi. Saya lebih suka bisa menjamin kapan hal-hal akan terjadi, dan hal-hal apa yang akan terjadi ketika hal itu terjadi.

Orkestrasi boneka sebenarnya adalah masalah yang sulit .
Salah satu solusi "praktik terbaik" adalah dengan menggunakan MCollective yang tidak hanya akan memungkinkan Anda untuk mengonfigurasi ketika boneka berjalan pada kelompok mesin Anda, tetapi Anda juga dapat menggunakannya untuk masalah orkestrasi serupa lainnya.

Tom O'Connor
sumber