Linuxコマンドにランダムな遅延を追加する


13

サーバーで並列コマンドを実行するためにfuncを使用しています。

先日、puppetviaのサービスの再起動によりfuncすべてのサーバーがpuppetmaster同時にヒットしたときに問題が発生しました。

私の質問:一連のサーバーで同じコマンドを正確に実行しながら、個々のサーバーで実行される前に遅延を追加するにはどうすればよいですか?

例えば: random_delay && service puppet restart

random_delayコマンドの一部に興味があります。

回答:


25

sleep $((RANDOM % MAXWAIT)) ここで、MAXWAITは秒単位の最大遅延です。


あなたがそれをエコーする場合、多くの場合「1」で立ち往生するようだ...思考?
コーリーS.

これにも気づきました。x in 1 2 3 4 5でこれを試してください。RANDOM = $ x; i = $((RANDOM%10)); echo $ i; スリープ$ i; 明らかに、S19Nの回答のMAXWAITは、私の回答の10と実質的に同じです。ランダムシードを変更し、もちろんあなたが望むものにパペットコードを追加します。
dtbnguyen

2
@CoreyS。$ RANDOMは最後の値をシードしているため、ループします(5/6 / 7、2 / 7、および5でスタックしました)。sleep $((RANDOM % MAXWAIT))正しい方法です。そのように答えを編集します。
ジェフファーランド

これは、Pro Puppetではsplayと呼ばれます。多くのマシンが同じことを同時に行っている雷の群れを防ぐために使用されます。これに加えて、を使用したcronスケジューリングで成功しましたfqdn_rand
フランソワボーソレイユ

これは、bash固有の拡張機能に依存しているようです。dash echo sleep $((RANDOM % 900))戻りますsleep 0。これは、#!/bin/shスクリプトやcrontabなどの場所で使用するのは安全ではないことを意味します。(問題dashは理解していないようです$RANDOM
ゲルト

1

S19Nの革新的でありながら理想的なソリューションとは程遠いものが大好きです。物事が実際に起こるとき、それはまだ大部分は非決定的であるので、私はそれが理想的とは言えないと言います。むしろ、いつ起こるのか、それが起こったときに何が起こるのかを保証することができます。

Puppetオーケストレーションは実際には難しい問題です。
「ベストプラクティス」ソリューションの1つは、MCollectiveを使用することです。これにより、マシンのクラスターでパペットを実行するタイミングを構成できるだけでなく、他の同様のオーケストレーションの問題にも使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.