在 Ubuntu 上“守护(daemonize)Node.js 进程”,常见做法从简单到生产级有以下几种,按推荐程度排序:
假设你的项目在 /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查
sudo systemctl daemon-reexec
sudo systemctl enable myapp
sudo systemctl start myapp
systemctl status myapp
journalctl -u myapp -f
sudo systemctl restart myapp
✅ 优点:稳定、自动重启、日志管理、开机自启
✅ 生产环境首选
npm install -g pm2
pm2 start app.js --name myapp
pm2 startup
pm2 save
pm2 list
pm2 logs
pm2 restart myapp
pm2 stop myapp
✅ 优点:简单、热重启、日志、监控
⚠️ 本质还是依赖 systemd / init
nohup node app.js > app.log 2>&1 &
关闭终端也不会停,但:
npm install -g forever
forever start app.js
⚠️ 已基本被 PM2 取代
docker run -d --restart=always node:18 myapp
适合微服务 / K8s
| 场景 | 推荐方案 |
|---|---|
| 生产服务器 | systemd |
| 快速部署 | PM2 |
| 临时测试 | nohup |
| 云原生 | Docker |
如果你愿意,可以告诉我:
我可以帮你写完整配置。