スイッチを「自動」に接続し、コマンドを使用してstartup-config
スイッチを検索するbash機能を作成しましたexpect
。expect
このスイッチは、ファッションを許可せずにssh user@host
ユーザーとパスワードのタプルを再要求するため、使用する必要があります。
これらのバックアップを管理するために作成した機能は次のとおりです。
main_pc3548(){
/usr/bin/env expect <<-END3548
spawn ssh -o StrictHostKeyChecking=no -o LogLevel=quiet $IP
expect "User Name:"
send "$USER\r"
expect "Password:"
send "$PASS\r"
expect "*# "
send "copy startup-config tftp://$SERVER/$SWNAME.cfg.bkp\r"
sleep 8
END3548
}
このコードブロックは、スイッチタイプを区別し、main_pc3548()
スイッチリストに次のスイッチモデルがあるときに呼び出されます。
egrep -v '(^#|^\s*$|^\s*\t*#)' $LISTA_SWITCHES | while read IP SWNAME SERVER TIPO
do
if [ "$TIPO" = core ]; then
main_pc6248
elif [ "$TIPO" = dep ]; then
main_pc3548
else
echo "$(date "+%d/%m/%Y-%T") - Switch $SWNOME Have a martian type of switch" >> $LOG_FILE
fi
done
スクリプトの残りの部分では、スイッチIP、TFTP IPアドレス、およびスイッチ名に関する情報を含むかなり長いファイルを読み取り、各スイッチについて8秒待つと時間がかかります。こんな睡眠が必要遅い接続によってTFTPレプリカが破壊されるのを防ぐために、私の質問は次のとおりです。
パフォーマンスを得るためにこの機能を「マルチスレッド」する簡単な方法はありますか?
答え1
解決策は、コメントで@devnullが提供したヒントです。各機能をバックグラウンドで実行します。
# Trata comentários na lista de switches
egrep -v '(^#|^\s*$|^\s*\t*#)' $LISTA_SWITCHES | while read IP SWNOME SERVER TIPO
do
if [ "$TIPO" = core ]; then
pc6248 &
elif [ "$TIPO" = dep ]; then
pc3548 &
elif [ "$TIPO" = rfs ]; then
rfs6000 &
else
echo "$(date "+%d/%m/%Y-%T") - Switch $SWNOME possui tipo marciano de switch" >> $LOG_FILE
fi
done
20秒後、約50個のスイッチがバックアップを完了しました:)