运行 tmux 中带有 ansible 的服务器

running a server in tmux with ansible

尝试为我正在使用 Django 构建的 API 设置临时服务器 - 到目前为止,我一直在偷工减料,使用 python manage.py runserver 开始这件事。但现在设置变得有点复杂,我决定构建一个 ansible playbok。在我启动 gunicorn 之前,一切都很好——因为我希望它在 tmux 会话中 运行。手动过程似乎并不能简单地转化为 ansible。我一直在手动创建 tmux 会话:

tmux new-session -A -s api

然后 运行在这个新“环境”中使用 gunicorn (subshell?)

问题是(对于 ansible 老手来说可能很明显),当我到达 运行 第一步时,我的剧本就挂了,永远不会进入下一步,这就是 gunicorn 所在的地方开始。我想这是因为我正在用 tmux 启动一个新的 shell,而 ansible 丢失了,没有收到回复(因为,我猜,它仍在等待对原始 shell 的响应?永远不会来)。是否有正确的方法来执行“tmux”步骤,让 ansible 将其用作下一步的 context/environment,或者我应该满足于 ansible 进行设置,然后手动执行 tmux 操作?我有一个类似的问题,在处理 gunicorn 在 vi​​rtualenv 中的事实时,但解决方法是使用完整路径,其中包括 virtualenv 胆量。不确定 tmux 是否有类似的解决方法...

谢谢大家

tmux 立即附加到新会话,并且在您从会话分离或会话中的最后一个进程结束之前不会退出。在 tmux 退出之前,脚本的其余部分将挂起。

您可以使用 -D 选项来防止附加到会话,无论是否需要创建它。

tmux new-session -AD -s api

脚本的其余部分现在可以继续了。


tmux new-session -AD -s api

的快捷方式
tmux has-session -t api || tmux new-session -d -s api