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