O
pdsh pode fazer o que você quiser. Por padrão, ele funcionará em várias máquinas ao mesmo tempo em paralelo, mas você pode usar a opção -f
para limitá-lo a execução em cada máquina, uma de cada vez, se desejar.
por exemplo,
# copy abc.tar.gz to /home/david on machine1..machine12
pdcp -w machine[1-12] abc.tar.gz /home/david
# run a bunch of commands on machine1..machine12
# be careful of quoting
pdsh -w machine[1-12] 'sudo stop service ; do something ; do something else ;
sudo start service'
Como alternativa, em vez de colocar todos os comandos em aspas simples ou duplas na linha de comando pdsh
, você pode pdcp
um script de shell para as máquinas remotas e executá-lo com um único comando.
pdcp -w machine[1-12] abc.tar.gz /home/david
pdcp -w machine[1-12] ./my-script.sh /tmp
pdsh -w machine[1-12] sh -c '/tmp/my-script.sh'
(use sh -c
apenas no caso de /tmp
ser montado noexec)
Isso é particularmente útil se você quiser evitar confusões ao ter vários níveis de cotações aninhadas (por exemplo, se precisar executar alguns comandos com sudo
ou su
ou incorporar awk
ou sed
ou qualquer script). Geralmente, é muito mais simples escrever um script de shell normal (ou awk
ou perl
ou qualquer outro), copiá-lo para onde for necessário e executá-lo lá.
pdsh
também permite que você use um arquivo chamado /etc/genders
para definir máquinas e quais atributos (arbitrários) você atribui a elas. por exemplo,
machine0 master,all
machine[1-12] machines,all
web[1-4] webservers,all
db[1-2] mysql,db,all
Você pode selecionar as máquinas por atributo na linha de comando pdsh
ou pdcp
com -g
, por exemplo, pdcp -g machines abc.tar.gz /home/david
ou pdsh -g all uname -a
ou pdsh -g web,db,master uptime
.
pdsh
foi escrito para uso em clusters HPC, mas descobri que ele é igualmente útil para a administração em massa de qualquer grupo de máquinas.
BTW, pdsh
é um tipo diferente de ferramenta para puppet
ou ansible
ou cfengine
etc - eles são para instalar e manter um ambiente consistente em um grupo de máquinas (como um cluster ou um Fazenda de VM, etc). pdsh
é mais para executar comandos únicos e / ou cópias (de ou para) no mesmo grupo de máquinas.