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.