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

如何让自托管GitHub Action启动的Tmux会话在任务完成后持久化?

问题分析

自托管GitHub Action的Job执行完成后,会终止其关联的所有进程组。你通过Job启动的Tmux会话默认属于该Job的进程组,当Job结束时,系统会向整个进程组发送SIGHUP信号,导致Tmux会话被强制终止——这就是任务运行时能看到会话,任务结束后会话消失的核心原因。

解决方案

你需要让Tmux会话脱离Job的进程组,避免被Job的清理流程终止,以下是几种可行的修改方式:

方式一:使用setsid隔离进程组

修改deployserver.sh中的Tmux启动命令,用setsid启动Tmux,让它创建独立的进程组:

#!/bin/bash

echo $1
echo $2
DEPLOY_FOLDER=$1
CONTAINER_NAME=$2

# 使用setsid让tmux脱离当前进程组
setsid tmux new -d -s $CONTAINER_NAME -- pipenv run python server_web/run_server.py

方式二:结合nohup忽略SIGHUP信号

用nohup包裹Tmux启动命令,同时重定向输出避免占用Job的输出流:

#!/bin/bash

echo $1
echo $2
DEPLOY_FOLDER=$1
CONTAINER_NAME=$2

# nohup忽略SIGHUP信号,并重定向输出到/dev/null
nohup tmux new -d -s $CONTAINER_NAME -- pipenv run python server_web/run_server.py > /dev/null 2>&1 &

方式三:先启动独立的Tmux服务器

先启动脱离当前会话的Tmux服务器,再创建目标会话:

#!/bin/bash

echo $1
echo $2
DEPLOY_FOLDER=$1
CONTAINER_NAME=$2

# 启动独立的tmux服务器,再创建会话
tmux start-server
tmux new -d -s $CONTAINER_NAME -- pipenv run python server_web/run_server.py
验证方法

修改脚本后重新触发Workflow,在Job完成后登录到自托管Runner机器,执行tmux ls命令,即可看到持久化的Tmux会话。

内容的提问来源于stack exchange,提问作者Scott C.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:17:34