Linux - запуск однієї і тієї ж команди на багатьох машинах одночасно


39

У мене є близько десятка ящиків для Linux, які мені періодично потрібно запускати ті самі команди. Чи є простіший (або автоматизований спосіб) зробити це, окрім входу в систему на кожній машині та виконання команди, по одному? Це не однакові команди весь час, і це не в заданий час, тому це не щось ідеальне для таких інструментів cron.


подібне запитання serverfault.com/questions/17931/…
hayalci

Нарешті канонічний список :)
rogerdpack

Відповіді:


12

Гм, можливо, pconsole - це потрібний інструмент.


Ого, pconsole виглядає досить круто! Я встановив це без проблем, і, схоже, поки що це чудово. Дякую!
Кріс Бунч

Це теж один із моїх улюблених інструментів. :) np
Вузол


8

Ви повинні перевірити Лялечку. Тут ви знайдете статтю linux.com про її налаштування та використання


1
Хм, Лялька виглядає досить цікаво. Я перегляну це, якщо pconsole почне мене виводити з ладу, так як у мене він вже працює, і це простіше, ніж вивчати мову лялечки. Дякую за пропозицію, хоча!
Кріс Бунч

Зокрема, колективний інструмент "Маріонет" (також його називають mcollective, або mco). Це частина маріонеток, яка дозволяє робити речі на групі господарів, спираючись на лялькові факти.
Брайан Мінтон


8

Ви можете спробувати Capistrano . Спочатку це інструмент розгортання Rails, але він зробив багато справ із віддаленими машинами.

Для більш повного підходу до управління декількома машинами ви можете спробувати шеф-кухаря .


8

Ansible має можливість виконувати спеціальні команди, а також розширюється для повного управління конфігурацією. Можливість співставити на основі груп відмінна.

http://docs.ansible.com/intro_adhoc.html


ansibleдобре працює з сотнями машин одночасно, або ви можете обмежити її одночасно російськими машинами
пташенята

6

Напевно, я скопіюю та вставлю свою відповідь із Stack Overflow , який, здавалося, подобається людям. . .


Питання про те, як запустити команди відразу на багатьох серверах, з’явилося в списку розсилки Perl днями, і я дам ту саму рекомендацію, яку я дав там , а саме використовувати gsh: http://outflux.net/unix/ програмне забезпечення / gsh

gsh схожа з рішенням, що " for box in box1_name box2_name box3_name" вже дане, але я вважаю, що gsh є більш зручним. Ви встановлюєте файл / etc / ghosts, що містить ваші сервери в таких групах, як web, db, RHEL4, x86_64 або будь-що інше (man ghosts), тоді ви використовуєте цю групу при виклику gsh.

[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$

Ви також можете комбінувати або розділяти групи привидів, наприклад, використовуючи web + db або web-RHEL4.

Я також зазначу, що, хоча я ніколи не використовував shmux, його веб-сайт містить перелік програмного забезпечення (включаючи gsh), яке дозволяє запускати команди відразу на багатьох серверах. Капістрано вже згадувалося і, як я розумію, може бути і в цьому списку.


5

Якщо ви перебуваєте на робочому столі KDE, у konsole є опція "Надіслати вхід для всіх сеансів". Це стосується всіх сеансів, відкритих у одному вікні консолі.


5

Ви також можете спробувати, ssh [user@]hostname [command]а потім перегляньте назви хостів.


2
Це насправді не задовольняє частину "одразу" (це серіалізовано, а не паралельно), але оскільки це, здається, не є вимогою до органу питання, це також може бути гідним рішенням.
voretaq7

4

Також погляньте на функцію. Функція дозволяє використовувати архітектуру модулів для управління різними аспектами системи, починаючи від роботи з пакетами, виконуючи команди тощо. Він працює на модулі клієнт / сервер через SSL і також має досить гнучку схему аутентифікації.


Поряд з цим, Func будується Red Hat і, ймовірно, побачить розширене використання у майбутніх продуктах Fedora / RHEL. Це, безумовно, варто спостерігати, тому що я думаю, що це стане фактичним стандартним рішенням для такого типу проблем.
Крістофер Кашелл

4

Я використовував ClusterSSH і він працює. Однак за межами певної кількості терміналів це не дуже добре.

Я здивований, що ніхто не згадує і xargs. Xargs ідеально підходить для більшості речей. Насправді мені стало так комфортно, що я більше ніколи не використовую кластерсш.

Приклад

echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"

(Перезапустіть apache на всіх веб-хостах.)


для послідовників -P30частина означає "пробігти 30 з них паралельно"
rogerdpack

4

Якщо ви вже користувач tmux, ви можете насолоджуватися tmux-cssh (розшифровується як TMUX-C(luster)-SSH). Ви надаєте йому список імен серверів, і він відкриває нове вікно tmux з відкритим сеансом SSH для кожного сервера на його власній панелі. Усі натискання клавіш копіюються у кожне вікно. Залежно від кількості хостів вихід може бути важко прочитати.


1
Одне посилання на вкладиші не обов'язково корисне. Будь ласка, описовою. Чому ви рекомендуєте цей інструмент?
Мисливець на оленів

3

Інші інструменти:

RunDeck також можна було б описати як легкий ControlTier.

Ці інструменти не лише надають оболонку кластеру, але й веб-інтерфейс, і ви можете зберегти свої завдання для подальшого використання.


2

Ви також можете спробувати Cluster SSH (cssh). Я цього не використовував, але на LinuxJournal.com є стаття під назвою "Ефективно керувати кількома серверами", яка говорить про це.


1

Використовуйте блюдо , просте і дуже потужне! Цей сценарій змінив моє життя :) Один сценарій, щоб керувати ними всіма!

http://nic-nac-project.org/~drimiks/gnu/dish.shtml

Оболонка старанності 'dish' виконує команди через ssh / rsh / telnet / mysql одночасно в декількох системах. Зміна пароля, оновлення конфігурації, копіювання файлів, перевірка стану тощо на сотнях вузлів стає простим. Блюдо схоже на IBM 'dsh' (розподілена оболонка), але крім того, дозволяє віддалено виконувати команди, що вимагають аутентифікації. Порівняно з іншими пакетами з відкритим кодом, які включають розподілену оболонку (або подібні інструменти), такі як ClusterIt, оболонка танцюриста, паралельно розподілена оболонка або C3, блюдо є тонким і простим у використанні обгорткою з віддаленою оболонкою для випадків, коли потрібне гнучке рішення. Ви можете переглядати сторінку керівництва страви в режимі он-лайн тут.


1

Ось кілька прикладів використання команд, згаданих в інших відповідях:

pdsh

Може приймати числові діапазони, виводи спочатку з ім'ям хоста, здається, фактично підтримуються :

найпростіша версія:

pdsh -w hostname echo done

вихід:

hostname: done

Складніший приклад:

pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"

вихід:

hostname8: done
hostname7: done
otherhost: done

Мак: brew install pdsh

дш

dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"

потрібна віддалена настройка оболонки, інакше він буде використовувати "rsh", який може бути, а може і не бути доступним.

Мак: brew install dsh

pssh

pssh -i -H user@host -H user@host "sleep 5 && echo done"

Всі вони можуть брати список машин із файлу, також необов’язково.

Сміливо додайте сюди більше прикладів, це вікі спільноти

Мак: brew install pssh

Кластер SSH

Кластер SSH ("mac only version", мабуть, є дві версії, інша є тут ) насправді відкриває "справжні термінали" з великим терміналом в нижній частині, який надсилає вхід для всіх інших. Таким чином, це як інтерфейс, який надсилає його на кілька.

Наприклад:

csshX hostname0[1-2] hostname3 потім введіть у червоне поле і воно перейде до кожного вікна терміналу, по одному на хост, щоб воно спливе.

mac: brew install csshx(стара версія, але все ще працює)

також є brew install ansibleFWIW

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