다중 bash 기능 실행

다중 bash 기능 실행

스위치를 "자동으로" 연결하고 명령을 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개의 스위치가 백업을 완료했습니다 :)

관련 정보