このループは、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
。