Linux - Esecuzione dello stesso comando su più macchine contemporaneamente


39

Ho circa una dozzina di scatole Linux su cui occasionalmente ho bisogno di eseguire gli stessi comandi. Esiste un modo più semplice (o automatizzato) per eseguire questa operazione oltre ad accedere a ciascuna macchina ed eseguire il comando, uno alla volta? Non sono sempre gli stessi comandi e non è in un momento prestabilito, quindi non è qualcosa di ideale per strumenti come cron.



Finalmente l'elenco canonico :)
rogerdpack,

Risposte:


12

Forse la pconsole è lo strumento che desideri.


Wow, la pconsole sembra piuttosto bella! L'ho installato senza problemi e sembra essere fantastico finora. Grazie!
Chris Bunch,

È anche uno dei miei strumenti preferiti. :) np
Nodo


8

Dovresti dare un'occhiata a Puppet qui è un articolo di linux.com sulla sua configurazione e utilizzo


1
Hmm, Puppet sembra piuttosto interessante. Daremo un'occhiata se pconsole inizia a fallire, dal momento che l'ho già in esecuzione ed è più facile che imparare la lingua di Puppet. Grazie per il suggerimento però!
Chris Bunch,

In particolare, lo strumento Marionette Collective (chiamato anche mcollective o mco). Fa parte del burattino che ti consente di fare cose su un gruppo di host, in base a fatti di burattini.
Brian Minton,


8

Puoi provare Capistrano . Inizialmente è uno strumento di distribuzione di Rails, ma è cresciuto per fare molte cose con macchine remote.

Per un approccio più completo all'amministrazione di più macchine potresti provare Chef .



6

Immagino che copierò e incollerò la mia risposta dallo Stack Overflow , che alla gente sembrava piacere. . .


Il problema di come eseguire comandi su molti server contemporaneamente è emerso in una mailing list Perl l'altro giorno e darò la stessa raccomandazione che ho dato lì , che è usare gsh: http://outflux.net/unix/ software / gsh

gsh è simile alla " for box in box1_name box2_name box3_name" soluzione già fornita, ma trovo che gsh sia più conveniente. Si configura un file / etc / ghosts contenente i propri server in gruppi come web, db, RHEL4, x86_64 o qualsiasi altra cosa (man ghosts), quindi si usa quel gruppo quando si chiama 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 ~]$

Puoi anche combinare o dividere gruppi fantasma, usando web + db o web-RHEL4, per esempio.

Citerò anche che, sebbene non abbia mai usato shmux, il suo sito Web contiene un elenco di software (incluso gsh) che consente di eseguire comandi su molti server contemporaneamente. Capistrano è già stato menzionato e (da quello che ho capito) potrebbe anche essere in quella lista.


5

Se sei su un desktop KDE, konsole ha l'opzione "Invia input a tutte le sessioni". Si applica a tutte le sessioni aperte nella stessa finestra della console.


5

Puoi anche provare a ssh [user@]hostname [command]scorrere i nomi degli host.


2
Questo non soddisfa davvero la parte "immediatamente" (è serializzata, non in parallelo), ma poiché ciò non sembra essere un requisito del corpo della domanda, questa potrebbe anche essere una soluzione decente.
voretaq7,

4

Dai un'occhiata anche a func. Func consente di utilizzare un'architettura di modulo per controllare diversi aspetti di un sistema, dalla gestione dei pacchetti, all'esecuzione di comandi, ecc. Funziona su un modulo client / server su SSL e ha anche uno schema di autenticazione abbastanza flessibile.


Insieme a ciò, Func è in fase di costruzione da parte di Red Hat ed è probabile che vedrà un uso ampliato nei futuri prodotti Fedora / RHEL. Questo è sicuramente uno da guardare, poiché mi aspetto che diventerà la soluzione standard di fatto per questo tipo di problema.
Christopher Cashell,

4

Ho usato ClusterSSH e funziona. Tuttavia, oltre un certo numero di terminali, non si adatta bene.

Sono sorpreso che nessuno abbia menzionato xargs. Xargs è perfetto per la maggior parte delle cose. In effetti, mi sono sentito così a mio agio con esso che non uso più clusterssh.

Esempio

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

(Riavvia apache su tutti gli host web.)


per i follower, la -P30parte significa "esegui 30 in parallelo"
rogerdpack,

4

Se sei già un utente di tmux, potresti apprezzare tmux-cssh (acronimo di TMUX-C(luster)-SSH). Gli dai un elenco di nomi di server e apre una nuova finestra di tmux con una sessione SSH aperta a ciascun server nel suo riquadro. Tutti i tasti vengono copiati in ciascuna finestra. A seconda del numero di host, l'output può essere difficile da leggere.


1
I collegamenti di un liner non sono necessariamente utili. Si prega di essere descrittivi. Perché consigli questo strumento?
Deer Hunter,

3

Altri strumenti sono:

RunDeck potrebbe anche essere descritto come ControlTier leggero.

Questi strumenti non solo ti offrono una shell cluster, ma anche un frontend web e puoi salvare i tuoi lavori per un uso futuro.


2

Puoi anche provare Cluster SSH (cssh). Non l'ho usato, ma c'è un articolo su LinuxJournal.com chiamato "Gestisci più server in modo efficiente" che ne parla.


1

Usa un piatto semplice e molto potente! Questa sceneggiatura mi ha cambiato la vita :) Una sceneggiatura per dominarli tutti!

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

La "parabola" della shell di diligenza esegue comandi tramite ssh / rsh / telnet / mysql contemporaneamente su diversi sistemi. La modifica della password, l'aggiornamento della configurazione, la copia dei file, il controllo dello stato, ecc. Su centinaia di nodi è reso semplice. Dish è simile al 'dsh' di IBM (shell distribuita) ma consente inoltre l'esecuzione remota di comandi che richiedono autenticazione. Rispetto ad altri pacchetti open source che includono una shell distribuita (o strumenti simili) come ClusterIt, shell del ballerino, shell distribuita parallela o C3, dish è un wrapper di shell remota sottile e facile da usare per i casi in cui è necessaria una soluzione flessibile. Puoi sfogliare online la pagina di manuale del piatto qui.


1

Ecco alcuni esempi usando i comandi menzionati in altre risposte:

pdsh

Può prendere intervalli numerici, prima output con il nome host, sembra effettivamente mantenuto :

versione più semplice:

pdsh -w hostname echo done

produzione:

hostname: done

Esempio più complicato:

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

produzione:

hostname8: done
hostname7: done
otherhost: done

Mac: brew install pdsh

DSH

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

necessita delle impostazioni della shell remota altrimenti userà "rsh" che potrebbe essere o non essere disponibile.

Mac: brew install dsh

pssh

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

Tutti possono prendere l'elenco delle macchine da un file, facoltativamente, anche.

Sentiti libero di aggiungere altri esempi qui, è un wiki di comunità

Mac: brew install pssh

Cluster SSH

Cluster SSH (la "sola versione mac" apparentemente ci sono due versioni, l'altra è qui ) in realtà apre "terminali reali" con un grande terminale in quella parte inferiore che invia input a tutti gli altri. Quindi è come un'interfaccia utente che lo invia a più.

Ex:

csshX hostname0[1-2] hostname3 quindi digita nella casella rossa e va su ogni finestra del terminale, una per host, che si apre.

mac: brew install csshx(una versione precedente ma funziona ancora)

c'è anche un brew install ansibleFWIW

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.