You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:35:27