通过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
相关产品推荐
相关产品推荐

