複数のbash機能の実行

複数のbash機能の実行

スイッチを「自動」に接続し、コマンドを使用してstartup-configスイッチを検索するbash機能を作成しましたexpectexpectこのスイッチは、ファッションを許可せずに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個のスイッチがバックアップを完了しました:)

関連情報