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

如何关闭PuTTy窗口后保持EC2实例上Rails应用的Puma服务器运行?

嘿,这个问题一点都不浅显——很多刚把Rails应用部署到EC2的开发者都会碰到这个坎!要让Puma在你关闭PuTTy甚至关掉本地电脑后还稳稳运行,有几个靠谱的方案,我给你拆解一下:

方案1:用nohup快速临时运行

这是最快捷的临时解决方案,适合测试场景。它能让进程脱离当前终端会话,即使你关掉PuTTy也能继续跑。

步骤很简单:

  • 进入你的Rails应用根目录
  • 执行命令:
    nohup bundle exec puma -C config/puma.rb &
    
    • nohup会让程序忽略终端关闭的信号,把输出默认写到当前目录的nohup.out文件里
    • &让进程在后台运行

如果要查看Puma的日志,直接看这个文件就行:

tail -f nohup.out

⚠️ 注意:这个方案的缺点是EC2实例重启后,Puma不会自动启动,所以只适合临时测试用。

方案2:用tmux/screen保留会话(适合开发调试)

如果你需要时不时回到Puma的控制台查看输出或者调试,用会话管理工具tmux或者screen就很合适。它们会在服务器上保留一个独立的会话,即使你断开连接,会话里的进程依然在运行。

以tmux为例:

  1. 先安装tmux(如果EC2上没有):

    • Ubuntu/Debian系统:sudo apt update && sudo apt install tmux
    • Amazon Linux/RHEL系统:sudo yum install tmux
  2. 创建一个新的tmux会话:

    tmux new -s puma_session
    

    这里puma_session是会话名称,你可以随便取。

  3. 在这个会话里正常启动Puma:

    bundle exec puma -C config/puma.rb
    
  4. 现在你可以脱离这个会话,按快捷键:Ctrl+B,然后松开再按D。这时候你关掉PuTTy也没关系,Puma还在跑。

  5. 下次重新连接EC2后,要回到这个会话,执行:

    tmux attach -t puma_session
    

⚠️ 注意:和nohup一样,EC2重启后会话会消失,所以还是适合开发调试阶段用。

方案3:用systemd做持久化服务(生产环境推荐)

如果是生产环境,必须用系统服务来管理Puma——它能让Puma开机自动启动,进程挂了还能自动重启,稳定性拉满。

步骤如下:

  1. 创建一个systemd服务文件,比如/etc/systemd/system/puma.service,用编辑器打开:

    sudo nano /etc/systemd/system/puma.service
    
  2. 把下面的内容粘贴进去,注意替换成你自己的配置:

    [Unit]
    Description=Puma HTTP Server for My Rails App
    After=network.target
    
    [Service]
    Type=simple
    User=ec2-user  # 换成你的EC2用户名,比如ubuntu
    Group=ec2-user # 同上
    WorkingDirectory=/home/ec2-user/my-rails-app # 换成你的Rails应用根目录
    ExecStart=/home/ec2-user/.rbenv/shims/bundle exec puma -C config/puma.rb # 换成你的bundle路径,比如用rvm的话路径是/home/ec2-user/.rvm/gems/ruby-x.x.x/wrappers/bundle
    Restart=always # 进程挂了自动重启
    RestartSec=5 # 重启间隔5秒
    Environment=RAILS_ENV=production # 换成你的运行环境,development/production
    Environment=BUNDLE_PATH=/home/ec2-user/.rbenv/versions/x.x.x/lib/ruby/gems/x.x.x/gems # 如果需要指定bundle路径的话
    
    [Install]
    WantedBy=multi-user.target
    
  3. 保存并退出编辑器(nano里按Ctrl+O,回车,再Ctrl+X)。

  4. 重新加载systemd配置:

    sudo systemctl daemon-reload
    
  5. 启动Puma服务:

    sudo systemctl start puma
    
  6. 设置开机自启:

    sudo systemctl enable puma
    

之后你可以用这些命令管理Puma:

  • 查看服务状态:sudo systemctl status puma
  • 重启服务:sudo systemctl restart puma
  • 停止服务:sudo systemctl stop puma
  • 查看实时日志:journalctl -u puma -f

这个方案是生产环境的标准做法,稳定性和可维护性都最好。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:37:32