【发布时间】:2015-10-24 12:19:46
【问题描述】:
我已经使用带有 Digital Ocean 的 Ubuntu 服务器在 VPS 上成功部署了我的 rails 应用程序。我正在使用工头启动许多进程,如果我 ssh 进入我的服务器,我可以使用 foreman start 启动我的工头服务器,但是当我关闭终端时,所有进程都会停止。如何让它在后台连续运行?
提前致谢。
【问题讨论】:
标签: ruby-on-rails ruby digital-ocean foreman
我已经使用带有 Digital Ocean 的 Ubuntu 服务器在 VPS 上成功部署了我的 rails 应用程序。我正在使用工头启动许多进程,如果我 ssh 进入我的服务器,我可以使用 foreman start 启动我的工头服务器,但是当我关闭终端时,所有进程都会停止。如何让它在后台连续运行?
提前致谢。
【问题讨论】:
标签: ruby-on-rails ruby digital-ocean foreman
更好的问题是“如何将 Rails 应用程序作为服务运行?”。
Foreman 是一款出色的开发工具,但它不提供进程监督、服务器启动时自动启动、日志轮换或使用 Unix 信号管理进程的能力。
如果您的 Ubuntu 是 15.04,那么您已经安装了 systemd,并且应该使用它。 Foreman 甚至可以通过foreman export systemd 导出您的配置(请参阅the foreman manpage)。
如果您的 Ubuntu 比这更旧,您将拥有 Upstart,Foreman 可以再次将其导出到 (foreman export upstart)。
使用 nohup、screen 或 tmux 来运行进程是可怕的建议,即使在短期内也会让你的生活变得不必要地困难。
【讨论】:
git pull; rake db:migrate 但需要我的 postgresql、redis 等在发生这种情况时运行的迁移脚本。 bash 脚本会执行 foreman start -f updateonly.yml &; PID=$? 然后在完成时 kill $PID 但是工头很愚蠢,需要一个 tmux 或屏幕实例。认真的WTF?那怎么组合?! (Unix 组合规则)
您现在可以安全地从远程计算机注销,您的进程将继续在 tmux 中运行。当您再次返回并想要检查进程状态时,您可以使用 tmux attach 附加到您的 tmux 会话。
如果您想同时运行多个会话,您应该使用 Ctrl-B 和 $ 命名每个会话。您可以使用 tmux list-sessions 获取当前正在运行的会话列表。
tmux 可以做更高级的事情,然后在单个会话中处理单个窗口。有关更多信息,请查看 man tmux 或 http://tmux.github.io/ 。有关 screen 和 tmux 之间主要区别的常见问题解答可在此处找到。
【讨论】: