web-dev-qa-db-ja.com

マルチプレックスbash関数の実行

スイッチを「自動的に」接続し、expectコマンドを使用して_startup-config_を取得するbash関数を作成しました。このスイッチは_ssh user@Host_方式を受け入れないため、expectを使用する必要があり、ユーザーとパスワードのタプルを再度要求します。

これは私がそれらのバックアップを管理するために作成した関数です

_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コピーを壊すための遅い接続を避けるために、ここに私の質問があります:

この関数を「マルチスレッド」してパフォーマンスを向上させる簡単な方法はありますか?

2
user34720

解決策は、@ 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個のスイッチでバックアップが完了しました:)

0
user34720