温馨提示×

ubuntu如何守护nodejs进程

小樊
62
2026-10-06 19:29:48
栏目: 编程语言

在 Ubuntu 上“守护(daemonize)Node.js 进程”,常见做法从简单到生产级有以下几种,按推荐程度排序:


一、推荐:使用 systemd(Ubuntu 官方方式 ✅)

1. 编写 Node 服务文件

假设你的项目在 /var/www/myapp,入口是 app.js

sudo nano /etc/systemd/system/myapp.service

内容示例:

[Unit]
Description=My Node.js App
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/node /var/www/myapp/app.js
Restart=on-failure
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

⚠️ ExecStart 的 node 路径用 which node 查

2. 启动并设置开机自启

sudo systemctl daemon-reexec
sudo systemctl enable myapp
sudo systemctl start myapp

3. 常用命令

systemctl status myapp
journalctl -u myapp -f
sudo systemctl restart myapp

✅ 优点:稳定、自动重启、日志管理、开机自启
✅ 生产环境首选


二、使用 PM2(Node 专用进程管理器 ⭐)

1. 安装

npm install -g pm2

2. 启动

pm2 start app.js --name myapp

3. 开机自启

pm2 startup
pm2 save

4. 常用命令

pm2 list
pm2 logs
pm2 restart myapp
pm2 stop myapp

✅ 优点:简单、热重启、日志、监控
⚠️ 本质还是依赖 systemd / init


三、使用 nohup(临时方案 ❌ 不推荐)

nohup node app.js > app.log 2>&1 &

关闭终端也不会停,但:

  • 不会自动重启
  • 难管理
  • 不适合生产

四、使用 forever(老方案)

npm install -g forever
forever start app.js

⚠️ 已基本被 PM2 取代


五、容器方式(进阶)

docker run -d --restart=always node:18 myapp

适合微服务 / K8s


✅ 总结建议

场景 推荐方案
生产服务器 systemd
快速部署 PM2
临时测试 nohup
云原生 Docker

如果你愿意,可以告诉我:

  • Ubuntu 版本
  • Node 版本
  • 是否 Web 服务(Express / Koa)
  • 是否要 HTTPS / Nginx

我可以帮你写完整配置。

0 踩