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

通过Ansible在tmux中启动gunicorn后找不到对应tmux会话问题求助

问题根因

你找不到tmux会话的核心原因是执行tmux命令的用户不一致:

  • Ansible执行playbook时默认用root用户运行任务,你ps输出里的tmux进程所有者也是root,root用户的tmux服务套接字默认存放在/tmp/tmux-0/default路径下
  • 你手动登录服务器时用的是普通用户akarpov(uid为1001),执行tmux ls时默认会去/tmp/tmux-1001/default路径找套接字,自然找不到root创建的tmux服务

另外你看到的两个gunicorn进程是正常现象:gunicorn默认会启动1个master进程+1个worker进程,属于正常的进程模型,不是故障。

解决方案

根据你实际的服务运行用户需求,选下面任意一种方案即可:

方案1:保持用root运行服务

你需要查看/操作tmux会话时,指定root的tmux套接字路径即可:

# 查看root创建的tmux会话
tmux -S /tmp/tmux-0/default ls
# 进入api会话
tmux -S /tmp/tmux-0/default attach -t api

方案2(更推荐):用普通用户akarpov运行服务

web服务不需要root权限,建议你在Ansible任务中指定运行用户为akarpov,这样你手动登录后直接就能看到会话:
修改你的playbook任务,增加become相关配置:

tasks:
    - name: drop into tmux and run gunicorn
      become: yes
      become_user: akarpov
      shell:
        cmd: tmux has-session -t api 2>/dev/null || tmux new-session -d -s api /home/akarpov/.local/share/virtualenvs/htmshop_parent-NXHiij2E/bin/gunicorn backend.wsgi:application -b 127.0.0.1:4000
        chdir: /home/akarpov/htmshop_parent

补充说明:命令里加了2>/dev/null是为了把has-session的预期报错过滤掉,避免多余的stderr输出影响任务判断,chdir改为绝对路径也能避免相对路径找不到目录的问题。

内容的提问来源于stack exchange,提问作者alexakarpov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:15:04