如何在关闭SSH连接后保持EC2 Ubuntu上的Next.js项目持续运行?
这是个非常典型的问题——当你通过SSH启动的进程,默认会绑定当前终端会话,一旦关闭PuTTY(终止SSH连接),系统会给这个进程发送SIGHUP信号,导致进程终止。下面给你几个实用的解决方案,按生产环境适配度排序:
方法1:使用PM2(生产环境首选)
PM2是专门为Node.js应用设计的进程管理器,不仅能让进程在后台持续运行,还支持自动重启(比如服务器重启后)、日志管理、性能监控等功能,我平时部署Next.js项目全靠它。
步骤如下:
- 全局安装PM2:
sudo npm install pm2 -g - 进入你的Next.js项目根目录,用PM2启动应用:
这里pm2 start npm --name "your-next-app" -- start"your-next-app"是你给项目起的别名,方便后续管理。 - 设置PM2开机自启(避免服务器重启后应用停止):
pm2 startup ubuntu -u $USER pm2 save - 常用管理命令:
- 查看应用状态:
pm2 status - 查看实时日志:
pm2 logs your-next-app - 重启应用:
pm2 restart your-next-app - 停止应用:
pm2 stop your-next-app
- 查看应用状态:
方法2:使用nohup(临时测试场景)
如果只是临时让应用后台跑一阵,不想装额外工具,nohup是最快的方式。
步骤:
- 在项目根目录执行:
nohup npm start &nohup会让进程忽略SIGHUP信号,&让进程后台运行
- 应用的输出日志会默认存放在当前目录的
nohup.out文件里,查看日志:tail -f nohup.out - 要停止进程的话,先找到进程PID:
然后用ps aux | grep npmkill <PID>终止进程(替换<PID>为实际进程号)
方法3:使用Screen/Tmux(会话管理,适合调试)
如果你需要随时回到终端查看应用输出(比如调试阶段),可以用会话管理工具,把进程放在独立的会话里,关闭SSH后会话依然存在。
用Screen的例子:
- 安装Screen:
sudo apt update && sudo apt install screen -y - 启动一个新会话:
screen -S next-session - 在会话里启动项目:
npm start - 按下
Ctrl+A再按D,detach(脱离)当前会话,此时关闭PuTTY也不会影响进程 - 下次SSH连接后,重新进入会话:
如果忘记会话名,可以用screen -r next-sessionscreen -ls查看所有会话
用Tmux的话(更现代的替代工具):
步骤类似,安装命令是sudo apt install tmux -y,启动会话tmux new -s next-session,detach是Ctrl+B再按D,重新连接是tmux attach -t next-session。
内容的提问来源于stack exchange,提问作者farhan saifi
相关产品推荐
相关产品推荐

