Додавання випадкової затримки для команди Linux


13

Я використовую функцію для виконання паралельних команд на наших серверах.

Днями у нас виникла проблема, коли сервіс перезапуску puppetчерез funcзробив, що всі наші сервери puppetmasterодночасно потрапили на наш .

Моє запитання: Як я можу виконати таку саму точну команду на наборі серверів, додаючи затримку до її виконання на окремих серверах?

Наприклад: random_delay && service puppet restart

Мене цікавить random_delayчастина команди.

Відповіді:


25

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


Здається, сильно застрягти на "1", якщо це відлучити ... Думки?
Корі С.

Помітив це також. Спробуйте це, для x in 1 2 3 4 5; робити RANDOM = $ x; i = $ ((RANDOM% 10)); ехо $ i; спати $ i; зроблено Очевидно, що MAXWAIT у відповіді S19N за дією схожий на 10 в моїй відповіді. Змініть насіння RANDOM і додайте код лялечки до всього, що вам хочеться.
dtbnguyen

2
@CoreyS. $ RANDOM висіває останнє значення, отже, циклічне цикління (я застряг 5/6/7, 2/7 та 5). sleep $((RANDOM % MAXWAIT))це правильний шлях. Я відредагую відповідь як таку.
Джефф Ферланд

Це називається splay у Pro Puppet. Він використовується для запобігання громового стада , де багато машин роблять те саме, що одночасно. На додаток до цього, я мав успіх із застосуванням планування кронів fqdn_rand.
Франсуа Бозолей

Схоже, це залежить від конкретних розширень. У dash echo sleep $((RANDOM % 900))віддачі sleep 0. Це означає, що його не безпечно використовувати в #!/bin/shсценаріях або таких місцях, як crontab. (Проблеми, здається, dashне розуміють $RANDOM)
Герт ван ден Берг

1

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

Оркестровка ляльок - це насправді важка проблема.
Одне з рішень "найкращої практики" - це використовувати MCollective, який не тільки дозволить вам налаштувати, коли лялька працює на вашому кластері машин, але ви також можете використовувати його для інших подібних проблем з оркестрою.


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

Це дозволить спати випадковою кількістю між 0 секундами та 12 годин (43200 = 12 x 60 x 60) кожні 12 годин

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.