ループ内のサーバーリストを持つGNUパラレルとsshpass

ループ内のサーバーリストを持つGNUパラレルとsshpass

このループは、consul members | grep awk {'print $2'} | cut -d ":" -f1すべてのサーバー(サーバーリスト=)でパッケージを順次更新しますconsul

for i in $(consul members | grep awk {'print $2'} | cut -d ":" -f1) ; do sshpass -p $PASSWORD ssh -oStrictHostKeyChecking=no -q root@$i "hostname && yum clean all && yum -y update consul && systemctl restart consul.service" ; done

sshpass私たちは1000台以上のサーバーを持っているので、10台のサーバーで並列に実行しようとしています。私が見つけたGNUパラレルこの仕事のために。

これをどのように使用sshpassし、どのサーバー(サーバーリスト)も2回完了しないようにできますか?

ベストアンサー1

実際にはpsshより良い解決策のように聞こえます。使用する必要がある場合は、parallel非常に簡単でなければなりません。 1行に1つのホスト名をプレースホルダとして{}機能する単一のコマンドにリンクするだけです。たとえば、

consul members | ... awk {'print $2'} | cut -d ":" -f1 |
parallel -j 10 sshpass -p "$PASSWORD" ssh -oStrictHostKeyChecking=no -q root@{} "hostname && yum clean all && yum -y update consul && systemctl restart consul.service"

使用法にsshpass違いはありません。 justなどの簡単なコマンドを使用して最初にテストしますhostname

おすすめ記事