Execução da função bash multiplex

2

Eu criei uma função bash para "automagicamente" conectar em nossos switches e recuperar seu startup-config usando o comando expect . Eu tenho que usar expect porque essa opção não aceita o ssh user@host fashion e me pergunta novamente pela tupla User e Password.

Esta é a função que eu criei para gerenciar esses backups

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
}

Esse bloco de código separará meus tipos de switch e chamará main_pc3548() quando minha lista de switches tiver esse modelo de switch:

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

O restante do script lê um arquivo bastante longo com informações sobre o IP do switch, o endereço IP do TFTP, o nome do Switch e a espera de 8 segundos que cada switch consome muito tempo. Esse sono é necessário para evitar conexões lentas para quebrar a cópia do tftp, então aqui vem minha pergunta:

Existe uma maneira fácil de "multithread" esta função para ganhar desempenho?

    
por nwildner 09.04.2014 / 21:24

1 resposta

0

A solução foi a dica que @devnull deu nos comentários: Execute cada função no background

# 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

Agora, após 20 segundos, cerca de 50 interruptores concluíram o backup:)

    
por 10.04.2014 / 14:21