Debian 上 JS(JavaScript)相关日志不更新,通常不是 Debian 本身的问题,而是应用、运行方式或日志配置导致的。下面按常见场景给你一个排查清单,你可以对照看看。
systemd 运行,但日志没写文件很多 Node.js 服务用 systemd 管理,stdout/stderr 被 journald 接管,不会写 /var/log。
✅ 检查:
journalctl -u your-service-name -f
如果你只盯着 /var/log/xxx.log,当然看不到更新。
Node.js 默认 stdout 是有缓冲的,在:
日志不会实时 flush。
✅ 解决方式:
export NODE_ENV=production
或启动时强制无缓冲:
node --no-buffer app.js
或在代码里:
process.stdout.flush?.()
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
有些 JS 项目:
development 写日志console.log✅ 检查代码:
console.log() // 只进 stdout
fs.writeFileSync() // 必须明确路径
✅ 确认日志路径:
lsof -p <node-pid> | grep log
Debian 默认有 logrotate,可能:
✅ 检查:
ls -i /var/log/your-app.log
✅ 解决:
copytruncate如果你用 PM2:
✅ 查看:
pm2 logs
pm2 list
✅ 开启日志:
pm2 start app.js --log /var/log/app.log
如果 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
你可以直接贴出:
我可以直接给你一版「Debian + Node.js 标准日志配置模板」。