Debian 上“JS 日志丢失”通常不是单一原因,而是日志系统、应用配置、磁盘/权限或 systemd 行为共同作用的结果。下面按常见场景给你一个排查清单,并给出对应解决办法。
如果你的 JS 服务是通过 systemd 启动的:
journalctl -u your-service
可能原因:
检查:
journalctl --disk-usage
解决:
mkdir -p /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-persist.conf <<EOF
[Journal]
Storage=persistent
MaxRetentionSec=7day
EOF
systemctl restart systemd-journald
Node.js 默认:
console.log()
console.error()
在 systemd 中 不会自动写文件,只进 journal。
现象:
journalctl -u xxx 里✅ 解决方式(推荐)
# systemd service
StandardOutput=append:/var/log/myapp/out.log
StandardError=append:/var/log/myapp/err.log
Debian 默认启用 logrotate。
典型问题:
检查:
lsof | grep deleted
✅ 解决:
非 root 用户运行 Node.js 时很常见。
现象:
检查:
ls -ld /var/log/myapp
✅ 解决:
mkdir -p /var/log/myapp
chown -R myuser:myuser /var/log/myapp
例如:
典型表现:
✅ 解决:
process.on('uncaughtException', (err) => {
fs.appendFileSync('/var/log/myapp/fatal.log', err.stack + '\n');
process.exit(1);
});
Debian 服务器非常常见。
检查:
df -h
df -i
✅ 解决:
journalctl -u your-service --since "10 min ago"
ls -lh /var/log/myapp
lsof -p $(pgrep node)
✅ 最稳妥组合
示例 logrotate:
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
copytruncate
}
你可以直接贴出:
我可以精准告诉你是哪一条导致的。