温馨提示×

Debian JS日志为何不更新

小樊
49
2026-08-11 22:05:44
栏目: 编程语言

Debian 上 JS(JavaScript)相关日志不更新,通常不是 Debian 本身的问题,而是应用、运行方式或日志配置导致的。下面按常见场景给你一个排查清单,你可以对照看看。


一、常见原因汇总(按概率)

1️⃣ 应用以 systemd 运行,但日志没写文件

很多 Node.js 服务用 systemd 管理,stdout/stderr 被 journald 接管,不会写 /var/log

✅ 检查:

journalctl -u your-service-name -f

如果你只盯着 /var/log/xxx.log,当然看不到更新。


2️⃣ 日志被缓存(最常见)

Node.js 默认 stdout 是有缓冲的,在:

  • 非 TTY
  • 后台运行
  • docker / systemd

日志不会实时 flush。

✅ 解决方式:

export NODE_ENV=production

或启动时强制无缓冲:

node --no-buffer app.js

或在代码里:

process.stdout.flush?.()

3️⃣ 日志目录权限不对

Debian 下 /var/log 通常 root 才能写

✅ 检查:

ls -ld /var/log/your-app
ps aux | grep node

如果 Node 用普通用户运行,却写 root 目录,日志会静默失败。

✅ 解决:

chown -R node:node /var/log/your-app
chmod 755 /var/log/your-app

4️⃣ 日志路径写错 / 没有写文件

有些 JS 项目:

  • 只在 development 写日志
  • 生产环境用 console.log

✅ 检查代码:

console.log()        // 只进 stdout
fs.writeFileSync()   // 必须明确路径

✅ 确认日志路径:

lsof -p <node-pid> | grep log

5️⃣ 日志被 logrotate 截断

Debian 默认有 logrotate,可能:

  • 日志被清空
  • 或 inode 变了,进程还在写旧文件

✅ 检查:

ls -i /var/log/your-app.log

✅ 解决:

  • 重启服务
  • 或 logrotate 加 copytruncate

6️⃣ PM2 没开日志

如果你用 PM2

✅ 查看:

pm2 logs
pm2 list

✅ 开启日志:

pm2 start app.js --log /var/log/app.log

7️⃣ systemd 重定向问题

如果 service 文件中:

StandardOutput=null

不会写任何日志。

✅ 查看:

systemctl cat your-service

✅ 推荐:

StandardOutput=journal
StandardError=journal

二、快速定位流程(推荐)

# 1. 找到进程
ps aux | grep node

# 2. 看文件句柄
lsof -p <pid> | grep log

# 3. 看 systemd 日志
journalctl -u your-service -f

# 4. 看目录权限
ls -ld /var/log

三、如果你愿意,我可以更精确帮你

你可以直接贴出:

  1. 运行方式(systemd / pm2 / docker / 手动)
  2. 日志路径
  3. 日志库(winston / pino / console.log)
  4. 完全不更新,还是 延迟更新

我可以直接给你一版「Debian + Node.js 标准日志配置模板」。

0