在服务器上跑服务(Node.js / 前端 SSR / 后端 API / 脚本)时,几乎所有人都会遇到这三个工具:
- nohup
- tmux
- pm2
很多教程只教“怎么用”,却不告诉你:
- 它们解决的到底是什么问题
- 适合在哪个阶段用
- 为什么线上一定不要乱用
这篇文章的目标是:
一次性把 nohup、tmux、pm2 的定位讲清楚,让你以后不再纠结。
一句话先给结论(先记住)
nohup:能跑就行
tmux:我在盯着跑
pm2:我对这个服务负责
一、nohup 是什么?
nohup = no hang up
意思是:
当终端(SSH)断开时,进程不要被挂掉。
本质
- Shell 提供的一个后台运行机制
- 不是进程管理器
- 不具备“守护能力”
nohup 怎么用?
最常见用法:
nohupnode server.js>server.log2>&1&解释:
nohup:忽略终端挂断信号>:重定向日志&:后台运行
nohup 能做什么?
SSH 断线,程序继续跑
简单、无学习成本
nohup 做不了什么?
进程崩溃不会重启
服务器重启服务就没了
没有进程列表
没有日志轮转
无法管理多个服务
nohup 适合用在哪里?
适合
- 临时脚本
- 一次性任务
- 快速验证
不适合
- Web 服务
- API
- 线上长期服务
二、tmux 是什么?
tmux = Terminal Multiplexer(终端复用器)
一句话理解:
tmux 管理的是“终端”,不是“进程”
tmux 的本质
- 创建一个“不会消失的终端会话”
- 你只是“attach / detach”这个终端
- 进程仍然是普通进程
tmux 怎么用?
1️⃣ 新建会话
tmux new -s myServer2️⃣ 在 tmux 里启动服务
node server.js3️⃣ 安全退出(服务不停止)
Ctrl + B → D4️⃣ 再次进入
tmux attach -t myServertmux 能做什么?
SSH 断线,服务继续
可随时回到现场看日志
Ctrl + C 可优雅停服务
非常适合调试
tmux 做不了什么?
服务崩溃不会自动重启
服务器重启 tmux 会话消失
没有真正的守护能力
一个很多人踩过的坑
删了代码,服务还能访问
原因是:
- Node 进程已加载代码到内存
- Linux 不会因为删文件就杀进程
- tmux 只是“壳”,不是守护
tmux 适合用在哪里?
适合
- 开发 / 调试
- 短期跑服务
- 需要实时观察日志
不适合
- 无人值守
- 真正生产环境
三、pm2 是什么?
pm2 = Node.js 进程守护与管理器
一句话概括:
pm2 解决的是“服务生命周期管理”
pm2 的本质
- Node.js 专用的进程守护器
- 类似 Linux 的
systemd - 面向生产环境设计
pm2 怎么用?
1️⃣ 安装
npminstall-g pm22️⃣ 启动服务
pm2 start server.js --name api3️⃣ 查看状态
pm2 status4️⃣ 查看日志
pm2 logs api5️⃣ 开机自启
pm2 save pm2 startuppm2 能做什么?
进程崩溃自动拉起
服务器重启自动启动
日志管理与轮转
多实例 / 集群模式
零停机重启
pm2 适合用在哪里?
适合
- Web 服务
- API
- 前端 SSR
- 线上生产环境
不适合
- 一次性脚本
- 非 Node 服务(需其他工具)
四、nohup / tmux / pm2 核心差异对比
| 能力 | nohup | tmux | pm2 |
|---|---|---|---|
| SSH 断线不影响 | ✅ | ✅ | ✅ |
| 可回到运行界面 | ❌ | ✅ | ❌ |
| 实时日志 | ❌ | ✅ | ✅ |
| 自动重启 | ❌ | ❌ | ✅ |
| 开机自启 | ❌ | ❌ | ✅ |
| 日志轮转 | ❌ | ❌ | ✅ |
| 进程管理 | ❌ | ❌ | ✅ |
| 生产可用 | ❌ | ❌ | ✅ |
五、放在真实架构里怎么选?
假设你的架构是:
Cloudflare → Nginx → Node :3000合理选择是:
- 开发 / 调试阶段:tmux
- 短期验证:tmux(勉强)
- 长期运行 / 生产:pm2
不推荐:
- Cloudflare + Nginx + nohup
- 长期线上服务只用 tmux
有错误或不同理解,欢迎指出与讨论 👍