【问题标题】:Running a Bash Script Continuously Across Multiple Servers (Local, Jumpbox and Dev server)跨多个服务器(本地、Jumpbox 和开发服务器)连续运行 Bash 脚本
【发布时间】:2023-03-30 00:46:01
【问题描述】:

最后我编写了一个 bash 脚本来构建一个 docker 容器(一个 NODE JS 应用程序),以便应用程序在 DEV 服务器上运行。问题是 bash 脚本必须在多个服务器上分阶段运行,即,我们需要在本地构建 docker 容器,ssh 到跳转盒并在那里 rsync ,然后将它从跳转盒 rsync 到开发服务器和然后再次 ssh 到它(如果这个过程是手动完成的)。

如果您查看下面 BASH 脚本中的第 5 步,则 rsync 已完成,脚本运行到 SSH 到 jumpbox 服务器,但是,脚本停在那里,我刚刚登录到 jumpbox。

谁能告诉我这个 bash 脚本有什么问题以及我应该如何解决它?

提前谢谢你。

最好, 回复

#!/bin/bash

#This script allows users to deploy the application with minimal work

echo -n "Shall we begin the deployment process? Are you ready to rule the world with QA Hero's next version? `\n` If you are, then type YES and press [ENTER]?: "
read begin

echo "Wohoooo! You did the right thing! We are now ready to roll and you can actually see your terminal scroll! Lol, what a troll!"

echo -n "Yo mate! Can you enter your enumber and press [ENTER]?: "
read enumber

docker build --build-arg NODE_ENV=staging -t course-hero-x -f Dockerfile .

echo "The file has been built! Step 1 completed"

termdown 3

echo "BOOM! Get ready for step 2."

docker save -o course-hero.tar course-hero-x

termdown 3

echo "BOOM! Get ready for step 3."

rsync -avzh --progress --stats course-hero.tar `echo ${enumber}`@10.188.129.25:/home/`echo ${enumber}`

termdown 3

echo "BOOM! Get ready for step 4."

ssh `echo ${enumber}`@10.188.129.25

termdown 3

echo "BOOM! Get ready for step 5."

ls -la

termdown 3

echo "BOOM! Get ready for step 6."

if ["$enumber" == "e30157" || "$enumber" == "E30167"]; then
    rsync -avzh --progress --stats course-hero.tar `echo ${enumber^^}`@10.80.63.65:/home/eh7/`echo ${enumber^^}`
elif ["$enumber" == "e32398" || "$enumber" == "E32398"]; then
    rsync -avzh --progress --stats course-hero.tar `echo ${enumber^^}`@10.80.63.65:/home/eh8/`echo ${enumber^^}`
else
    echo "You cannot access this system."
fi    

termdown 3

echo "BOOM! Get ready for step 7."

ssh `echo ${enumber^^}`@10.80.63.65

echo "BOOM! Get ready for step 8."

ls -la

echo "BOOM! Get ready for step 9."

sudo docker load -i course-hero.tar

termdown 3

echo "BOOM! Get ready for step 10."

sudo docker ps

termdown 3

echo "BOOM! Get ready for step 11."

sudo docker stop $(sudo docker ps -a -q)

termdown 3

echo "BOOM! Get ready for step 12."

sudo docker rm $(sudo docker ps -a -q)

termdown 3

echo "BOOM! Get ready for step 13."

sudo docker load -i course-hero.tar

termdown 3

echo "BOOM! Get ready for step 14."

sudo docker run -d -e TZ=Australia/Melbourne --net=courseHero -p 0.0.0.0:80:3000 course-hero-x

echo "QA Hero is up and running. Go to http://cohero-dev.rmit.edu.au to checkout the latest version!"

termdown 3

echo "Step 15 completed! We are done here! See you next time homey!"

【问题讨论】:

  • 请提供minimal, complete, verifiable example 或尽可能接近。
  • 我看不懂问题描述。运行ls -la 时,脚本会做一些奇怪的事情吗? termdown 是什么?
  • 您可能会考虑一些更高级别的工具,而不是完全手动构建它。如果你运行一个你的隔离服务器可以访问的 Docker 注册表,你可以docker push 给它,而不是手动复制镜像;任何流行的配置管理工具(Chef、Salt Stack、Ansible)都可以为您管理运行命令甚至更新远程主机上的 Docker 容器的任务。

标签: node.js bash docker


【解决方案1】:

一旦您打开了与另一个盒子的 ssh 会话,您的本地脚本就会停止,因为它正在等待 ssh 会话结束。您只是坐在远程框上的命令提示符下。

看起来你打算发生的是在远程机器上运行 ssh 之后的命令。要将命令发送到远程机器重定向它们:

ssh ${enumber}@10.188.129.25 <<'ENDSSH'
# series of commands to 
# run on remote host
ENDSSH

考虑通过Shellcheck 运行您的脚本 - 除了您询问的问题之外,您还遇到了几个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2017-01-29
    • 2012-11-11
    相关资源
    最近更新 更多