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

因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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:52:03