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

GitLab CI实现VPS上Python脚本常驻运行并正常退出流水线

解决GitLab CI流水线卡住同时保持Python脚本常驻运行的问题

直接执行python3 main.py会让SSH会话持续挂起,导致GitLab CI流水线一直处于运行状态无法正常结束。借助tmux创建后台会话可以完美解决这个问题:SSH命令执行完成后立即退出,流水线正常结束,同时Python脚本会在VPS的tmux会话中持续运行,直到下一次流水线执行时被重启。

修改后的CI脚本

script:
    - 'apt-get update -y && apt-get install openssh-client -y && apt-get install sshpass -y '
    - sshpass -p "$VPS_PASSWORD" ssh -o StrictHostKeyChecking=no root@host "
        # 若VPS未安装tmux则自动安装(可根据实际情况移除)
        apt-get install tmux -y || true &&
        cd repo/ && 
        git pull && 
        # 终止旧的Python应用会话,避免多进程冲突
        tmux kill-session -t python_app 2>/dev/null || true && 
        # 创建后台tmux会话启动脚本,输出重定向到日志文件
        tmux new-session -d -s python_app 'python3 main.py >> app.log 2>&1'
      "

关键命令说明

  • tmux kill-session -t python_app 2>/dev/null || true:强制终止名为python_app的tmux会话,即使会话不存在也不会报错。这样每次流水线执行时都会重启脚本,确保运行的是最新代码。
  • tmux new-session -d -s python_app 'python3 main.py >> app.log 2>&1':
    • -d:后台创建会话,不主动连接,让SSH命令可立即结束
    • -s python_app:给会话命名,方便后续管理
    • >> app.log 2>&1:将脚本的标准输出和错误输出重定向到日志文件,便于后续排查问题

额外优化建议

  • 安全存储密码:不要在脚本中明文写密码,将VPS密码存入GitLab项目的「CI/CD变量」中,用$VPS_PASSWORD引用,避免密码泄露。
  • 提前安装依赖:如果VPS是固定使用的,建议提前在VPS上安装好tmux、Python等依赖,减少CI脚本的执行时间。
  • 验证会话状态:若需要确认脚本是否启动成功,可在命令末尾添加tmux list-sessions来检查会话是否创建。

内容的提问来源于stack exchange,提问作者Kevin A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:45:20