AWS CodeDeploy部署Spring Boot应用时nohup.out未生成问题
问题:AWS CodeDeploy以root执行部署脚本时nohup.out文件未生成
我在Linux服务器上用AWS CodeDeploy部署Spring Boot Java20应用,其他环节均正常,但当CodeDeploy以root用户执行deploy.sh中的nohup启动命令时,预期的nohup.out文件未生成;切换为个人用户手动运行该脚本时,nohup.out可正常生成。
脚本内容(deploy.sh)
echo "about to deploy to pow-wow ($USER) ..." export JAVA_HOME=/home/jboss/.sdkman/candidates/java/current echo $JAVA_HOME export PATH=$JAVA_HOME/bin:$PATH cd /home/jboss/bitbucket/pow-wow pwd echo "stopping pow-wow ..." echo | lsof -t -i tcp:8080 kill -9 $(lsof -t -i tcp:8080) mv pow-wow-0.0.2-SNAPSHOT.jar target/ echo "Sorting logs ..." cd /home/jboss/bitbucket/pow-wow/logs pwd if [ -e nohup.out ] then cat nohup.out >> nohup-$(date --iso).out echo "archive logs to nohup-date.out and remove nohup.out" rm nohup.out else echo "could not find /home/jboss/bitbucket/pow-wow/logs/nohup.out" ls fi echo "starting pow-wow ..." cd /home/jboss/bitbucket/pow-wow nohup java -jar -Dspring.profiles.active=uat target/pow-wow-0.0.2-SNAPSHOT.jar & if [ -e nohup.out ] then mv nohup.out logs/ echo "Created /home/jboss/bitbucket/pow-wow/logs/nohup.out" else echo "Could not find nohup.out that should have been created from nohup java -jar" pwd ls fi echo "Run Start pow-wow."
执行输出
[stdout]Could not find nohup.out that should have been created from nohup java -jar
解决方案
显式指定nohup输出路径
nohup默认在当前工作目录生成nohup.out,但root执行时可能因环境或权限问题导致路径异常。直接在命令中指定输出到日志目录,同时合并标准输出和错误输出:nohup java -jar -Dspring.profiles.active=uat target/pow-wow-0.0.2-SNAPSHOT.jar > /home/jboss/bitbucket/pow-wow/logs/nohup.out 2>&1 &确保root对日志目录有写入权限
检查日志目录权限,若存在特殊限制(如ACL、NFS挂载规则),执行以下命令修复:chmod -R 755 /home/jboss/bitbucket/pow-wow/logs chown -R root:root /home/jboss/bitbucket/pow-wow/logs添加延时避免竞态条件
脚本中nohup执行后立刻检查文件,可能因进程未完成文件创建导致判断失败,添加短暂延时:nohup java -jar -Dspring.profiles.active=uat target/pow-wow-0.0.2-SNAPSHOT.jar & sleep 2 # 等待2秒确保文件生成 # 后续检查逻辑不变切换到jboss用户执行启动命令
既然jboss用户手动执行正常,在脚本中用su切换用户启动,复用已知正常的环境:su - jboss -c "cd /home/jboss/bitbucket/pow-wow && nohup java -jar -Dspring.profiles.active=uat target/pow-wow-0.0.2-SNAPSHOT.jar &"
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

