温馨提示×

为何debian nodejs日志丢失

小樊
44
2026-09-01 06:29:15
栏目: 编程语言

Debian 上 Node.js 日志“丢失”通常不是 Node 本身把日志删了,而是运行方式 + 日志重定向 + 系统管理机制共同导致的。下面按最常见原因逐一说明。


一、最常见原因(90% 情况)

1. 用 &nohup 启动,但没重定向日志

node app.js &
  • 标准输出(stdout)可能指向终端
  • 终端关闭后,输出直接丢失
  • 日志根本没有写文件

✅ 正确做法:

node app.js >> /var/log/node/app.log 2>&1 &

2. systemd 服务但没配置日志

如果你用 systemd 启动:

[Service]
ExecStart=/usr/bin/node /opt/app/app.js

Node 输出在 journald 里,而不是文件:

journalctl -u your-node-service

❌ 你以为“日志丢失”,其实在 journal 里


3. journald 日志被自动清理

Debian 默认:

  • journal 有大小限制
  • 重启或超期后自动清除

查看配置:

cat /etc/systemd/journald.conf

常见配置:

Storage=auto
SystemMaxUse=100M
MaxRetentionSec=2week

✅ 解决:

  • 增大保留时间
  • 或将日志写入文件

二、PM2 / 容器 / 脚本相关

4. PM2 日志被 rotate 或清理

PM2 默认日志在:

~/.pm2/logs/

但:

  • 磁盘满
  • logrotate 误删
  • 用户切换(root ↔ 普通用户)

✅ 检查:

pm2 logs
ls -lh ~/.pm2/logs

5. 用 Docker 但没挂载日志卷

docker run node node app.js

容器退出后日志消失

✅ 解决:

docker run -v /var/log/node:/app/logs node node app.js

三、Node.js 自身问题(较少)

6. 只用了 console.log,但进程崩溃

  • uncaughtException
  • OOM
  • 被 kill

✅ 建议:

process.on('uncaughtException', e => {
  fs.appendFileSync('/var/log/node/err.log', e.stack);
});

7. 日志目录权限问题

Node 无法写:

/var/log/node

但错误也被吞掉

✅ 检查:

ls -ld /var/log/node

四、排查清单(建议按顺序)

# 1. 是否在 journal
journalctl -u node服务名

# 2. 是否有日志文件
ls -lh /var/log/node

# 3. 启动命令是否重定向
ps aux | grep node

# 4. 磁盘是否满
df -h

# 5. 是否用了 PM2
pm2 list

五、推荐的生产级做法(Debian)

✅ systemd + 文件日志:

[Service]
ExecStart=/usr/bin/node /opt/app/app.js >> /var/log/node/app.log 2>&1

✅ 或用 PM2 + logrotate


如果你愿意,可以贴:

  • 启动方式(systemd / pm2 / docker / 手动)
  • Node 版本
  • Debian 版本

我可以直接帮你定位是哪一种“丢失”。

0