因EC2部署中的nohup命令导致GitHub Actions工作流无法完成
解决GitHub Actions中nohup导致SSH会话无法终止的问题
问题根源在于:即使给nohup命令加上&将进程放到后台,它依然属于当前SSH会话的子进程,SSH会等待所有关联子进程退出才会断开连接,最终导致工作流一直卡住。
你可以通过以下两种方案解决:
方案1:添加disown命令
在nohup命令后追加disown,让进程彻底脱离当前shell的控制,不再被SSH会话追踪:
nohup ./main >> /home/ec2-user/output.txt 2>&1 < /dev/null & disown
方案2:使用setsid启动进程
setsid会将进程放入新的会话组,完全脱离当前SSH会话的关联,从根源上避免SSH等待子进程:
setsid ./main >> /home/ec2-user/output.txt 2>&1 < /dev/null &
修改后的完整工作流代码:
name: EC2 auto deploy on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Deploy run: | echo "${{ secrets.PRIVATE_KEY }}" > private_key chmod 600 private_key ssh -o StrictHostKeyChecking=no \ ${{ secrets.USER_NAME }}@${{ secrets.HOST_NAME }} \ -i private_key \ "cd /home/ec2-user/my-app && \ git switch main && \ git fetch origin && \ git pull origin main && \ /usr/local/go/bin/go build -o main cmd/server/main.go && \ lsof -ti:8080 | xargs --no-run-if-empty kill && \ nohup ./main >> /home/ec2-user/output.txt 2>&1 < /dev/null & disown && \ sleep 5" echo "Deployment completed"
内容的提问来源于stack exchange,提问作者Nanano
相关产品推荐
相关产品推荐

