Eu tenho um script curto que usa scp
para copiar arquivos para vários hosts remotos (sim, eu sei sobre rdist
e rsync
; ambos não funcionam para alguns dos hosts - isso não é o ponto aqui, estou apenas copiando alguns arquivos não críticos de qualquer maneira).
A carne do roteiro é algo assim:
for h in $HOSTS; do
echo $h
echo '----------------------------------------'
scp -r $FILES ${h}:
echo ''
done
Aqui está a saída parcial da execução deste script:
protector
----------------------------------------
.bash_profile 100% 555 0.5KB/s 00:00
.bashrc 100% 2124 2.1KB/s 00:00
.zshenv 100% 561 0.6KB/s 00:00
.zshrc 100% 2354 2.3KB/s 00:00
.shrc 100% 1887 1.8KB/s 00:00
.bash_logout 100% 17 0.0KB/s 00:00
.logout 100% 64 0.1KB/s 00:00
.zlogout 100% 17 0.0KB/s 00:00
.vimrc 100% 717 0.7KB/s 00:00
pup
----------------------------------------
.bash_profile 100% 555 0.5KB/s 00:00
.bashrc 100% 2124 2.1KB/s 00:00
.zshenv 100% 561 0.6KB/s 00:00
.zshrc 100% 2354 2.3KB/s 00:00
.shrc 100% 1887 1.8KB/s 00:00
.bash_logout 100% 17 0.0KB/s 00:00
.logout 100% 64 0.1KB/s 00:00
.zlogout 100% 17 0.0KB/s 00:00
.vimrc 100% 717 0.7KB/s 00:00
Como este script copia para centenas de hosts, demora um pouco, então eu decidi tentar usar GNU Parallel para acelerar. Aqui está a versão revisada do script utilizando parallel
(por favor, não comente sobre o echo
hack no começo, não é relevante para o problema):
(for host in $(echo $HOSTS); do echo $host; done) | parallel "echo {}; echo '----------------------------------------' ; scp -r $FILES {}: ; echo ''"
O problema é que a saída de usar scp
dessa maneira se parece com isso:
pup
----------------------------------------
soils
----------------------------------------
Como os comandos estão sendo executados em paralelo, a ordenação é diferente e o paralelismo parece ser concluído muito mais rápido que um loop for de scps, mas como você pode ver, não há saída para stdout de scp. Não consigo descobrir por que - a saída para stdout do eco não está sendo suprimida, por exemplo. Quando tento scp -v
dentro de paralelo, recebo uma saída detalhada parcial, mas não obtenho nenhuma informação usual de tamanho / hora.
Existe alguém que saiba por que a saída do scp está sendo suprimida?