shell - 如何修复 bash 脚本参数从并行循环到顺序循环
问题描述
我有一个 bash 脚本,它可以循环 ssh 到不同的机器,如果传递了 reboot=y 参数(使用 jenkins),这个脚本也会重新启动机器。
问题 - 如果reboot = y,它无法为每个主机一一循环ssh命令,然后回显“rebooting 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
解决方案
推荐阅读
- javascript - 如何在 JS 中为动态图像制作灯箱
- laravel - 为什么 Artisan 命令在执行时引导服务提供程序
- powershell - 使用 PowerShell 为 CSV 中的每一行添加内容
- c# - 如何将 SslStream/AuthenticateAsServer 与自签名证书/密钥一起使用?
- docker - MultiStage dockerfile 跳过第一步,只运行第二步
- yaml - Logstash grok 过滤器调试
- python - 如何使两个列表相互引用?
- c++ - 在不使用动态内存分配的情况下实现桶排序和计数排序
- c# - 如何使用 Fluent Validation 针对 Entity Framework Core 字段属性进行验证
- node.js - MongoDB 正在返回所有字段而不是匹配的字段