我有一个简单的 bash 脚本文件,它是从管道作业(通过 SSH )触发的。这部署.sh或多或少包含这样的内容:
cd /apps && java -jar "-Dspring.profiles.active=prod " "-Dserver.port=$PORT " \
"/apps/$DEPLOYING_VERSION" &
还有其他一些不那么重要的逻辑。通过 SSH 的管道执行:
bash /deploy.sh ${APPLICATION_NAME}
如何开始部署.sh为了执行 java -jar 并将其与部署.sh为了完成我的管道(作业)并同时让 java 应用程序继续在机器上工作?我尝试过
cd /apps && nohup java -jar "-Dspring.profiles.active=prod " "-Dserver.port=$PORT " \
"/apps/$DEPLOYING_VERSION" &
但工作却卡住了...
跟踪并退出 java -jar 会很酷,但现在并不那么重要:)
答案1
如果您想并行运行cd /apps
,则java -jar
应该使用单个 & 符号,而不是两个: cd /apps & java -jar
。但是,java -jar
如果该命令假定在 /apps 目录中运行,则该命令将不起作用。
更一般而言,command1 & command2
将独立并行运行 command1 和 command2。
请注意,您的 CI/CD 工具(假设您正在谈论 CI/CD 管道)可能支持并行运行任务,因此您也可以尝试在管道定义中解决此问题(如果这对您的情况有意义)。
答案2
cd /apps;
nohup java -jar "-Dspring.profiles.active=prod " "-Dserver.port=$PORT " \
"/apps/$DEPLOYING_VERSION" > /apps/spring.log 2>&1 &
发挥魔力。