Добавление случайной задержки для команды Linux

13

Я использую func для выполнения параллельных команд на наших серверах.

На днях у нас возникла проблема, когда при перезапуске службы puppetvia funcвсе наши серверы работали puppetmasterодновременно.

Мой вопрос: как я могу выполнить одну и ту же команду на наборе серверов, добавив задержку перед выполнением на отдельных серверах?

Например: random_delay && service puppet restart

Я заинтересован в random_delayчасти команды.

Бельмин Фернандес
источник

Ответы:

25

sleep $((RANDOM % MAXWAIT)) где MAXWAIT - максимальная желаемая задержка в секундах.

S19N
источник
Кажется, вы застряли на «1», если вы это повторили ... Мысли?
Кори С.
Заметил это тоже. Попробуйте это, для х в 1 2 3 4 5; do RANDOM = $ x; I = $ ((RANDOM% 10)); echo $ i; спать $ я; сделано Очевидно, MAXWAIT в ответе S19N в действительности аналогичен 10 в моем ответе. Измените СЛУЧАЙНОЕ начальное число и добавьте код марионетки к тому, что вы хотите, конечно.
dtbnguyen
2
@CoreyS. $ RANDOM заполняет последнее значение, следовательно, цикл (я застрял на 5/6/7, 2/7 и 5). sleep $((RANDOM % MAXWAIT))это правильный путь. Я отредактирую ответ как таковой.
Джефф Ферланд
Это называется Splay в Pro Puppet. Он используется для предотвращения грохочущего стада , когда многие машины делают одно и то же одновременно. В дополнение к этому, у меня был успех с использованием планирования cron fqdn_rand.
Франсуа Босолей
Кажется, это зависит от расширений, специфичных для bash. В dash echo sleep $((RANDOM % 900))возврат sleep 0. Это означает, что это небезопасно для использования в #!/bin/shсценариях или таких местах, как crontab. (Проблемы вроде бы в том, dashчто не понимают $RANDOM)
Герт ван ден Берг
1

Мне очень нравится инновационное, но не идеальное решение S19N. Я только говорю, что это не идеально, так как все еще в значительной степени недетерминировано, когда что-то действительно произойдет. Я бы предпочел гарантировать, когда что-то случится, и что произойдет, когда это произойдет.

Кукольный оркестр на самом деле сложная проблема.
Одним из лучших решений является использование MCollective, которое позволит вам не только настраивать при запуске куколки на вашем кластере машин, но также использовать его для решения других подобных проблем оркестровки.

Том О'Коннор
источник