多重 bash 函数执行

多重 bash 函数执行

我创建了一个 bash 函数来“自动”连接我们的交换机并startup-config使用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 个交换机已完成备份:)

相关内容