ansible - 使用 ansible 在 tmux 中运行服务器
问题描述
试图为我正在使用 Django 构建的 API 设置一个登台服务器 - 到目前为止,我正在偷工减料,开始使用python manage.py runserver
. 但是现在设置变得更复杂了,我决定构建一个 ansible playbok。在我启动 gunicorn 之前,一切都运行良好——因为我希望它在 tmux 会话中运行。手动过程似乎并不容易转化为 ansible。我一直在手动创建 tmux 会话:
tmux 新会话 -A -s api
然后在这个新的“环境”(子shell?)中运行 gunicorn
问题是(对于资深老手来说可能很明显),当我开始运行第一步时,我的剧本只是挂起,永远不会进入下一步,这就是 gunicorn 的开始。我想这是因为我正在使用 tmux 启动一个新的 shell,并且 ansible 丢失了,没有收到回复(因为,我猜,它仍在等待原始 shell 的响应?这永远不会到来)。是否有正确的方法来执行“tmux”步骤,让 ansible 将其用作下一步的上下文/环境,或者我应该满足于 ansible 进行设置,然后手动执行 tmux 操作?在处理 gunicorn 位于 virtualenv 内部的事实时,我遇到了类似的问题,但解决方法是使用完整路径,其中包括 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
推荐阅读
- android - 保存 ArrayList 时出错
在保存的实例中 - java - 关系实体约定的休息控制器
- javascript - ReactJS:如何在文件/日志中打印开玩笑测试覆盖率结果
- android - 我应该如何在应用程序运行时处理撤销权限?
- sql - 选择另一列必须与两个特定选项之一匹配的位置
- javascript - 如何根据多个费用分摊金额拆分费用,多个用户具有不同的份额?
- vmware - Rancher 2.1 和 Vmware 存储类
- python - 使用 pymodm 连接 MongoDB 服务器的 Python 脚本中的身份验证失败错误
- javascript - 如何在数组[]中显示对象
- arrays - 最小化 (A[i]*B[i]) 的最大值