首页 > 解决方案 > 如何修复 bash 脚本参数从并行循环到顺序循环

问题描述

我有一个 bash 脚本,它可以循环 ssh 到不同的机器,如果传递了 reboot=y 参数(使用 jenkins),这个脚本也会重新启动机器。

问题 - 如果reboot = y,它无法为每个主机一一循环ssh命令,然后回显“rebo​​oting host”,最后运行sh app-services.sh $APP

我的目标是 - 重新启动完成后,我希望它一个一个地 ping 主机,如果 ping 返回成功,则 ssh 回到机器并重新启动托管应用程序的服务。

我当前的脚本 -

#!/bin/bash

IP_S="${HOSTS_STAGE}"
IP_P="${HOSTS_PROD}"

APP="$APPLICATION"

export APP
export host

if [ "${ENVIRONMENT}" == 'stage' ]; then 
    IP="${IP_S}"

elif [ "${ENVIRONMENT}" == 'prod' ]; then 
    IP="${IP_P}" 
fi 

echo "${IP}" 

for host in ${IP}; do 
    echo "########################################" 
    echo "## Running yum update on ${host}" 
    echo "########################################" 

    if [ "${REBOOT}" == 'n' ]; then 
        ssh -i "${id_rsa}" -o StrictHostKeyChecking=no dvopsadmin@${host} "sudo yum update -y"
        echo "##  Skipping reboot for ${host}"

    else
        ssh -i "${id_rsa}" -o StrictHostKeyChecking=no dvopsadmin@${host[@]} "sudo reboot"
        echo "##  Rebooting ${host}"
        ping -w 30 -c 1 ${host}

    # This is the other script that restart app services

    sh app-services.sh $APP


    fi

done

标签: shellscriptingautomation

解决方案


推荐阅读