在 Debian 上,JS(Node.js / 前端构建 / 服务端日志)写日志被“拒绝(Permission denied)”,通常不是 JS 本身的问题,而是Linux 文件/目录权限模型在起作用。下面按最常见原因逐条说明。
EACCES: permission denied, open '/var/log/myapp/app.log'
root 或其他用户www-data、node、ubuntu)没有写权限ls -ld /var/log/my/myapp
ls -l /var/log/myapp/app.log
sudo chown -R node:node /var/log/myapp
sudo chmod 755 /var/log/myapp
⚠️ 不建议直接
chmod 777
pm2 / systemd 就报权限错误sudo touch /var/log/myapp/app.log
sudo chown node:node /var/log/myapp/app.log
Permission denied (日志写在 /var/log)
systemd 默认对服务有严格限制:
ProtectSystem=strict
PrivateTmp=true
[Service]
User=node
Group=node
LogsDirectory=myapp
ReadWritePaths=/var/log/myapp
然后:
sudo systemctl daemon-reload
sudo systemctl restart myapp
sudo aa-status
sudo aa-complain /usr/bin/node
node (uid 1000)sudo chown -R 1000:1000 ./logs
或在 Dockerfile:
USER node
例如:
winstonpinolog4js如果路径是:
'/var/log/app.log'
但进程用户无权限 → 必拒
✅ 推荐:
path.join(__dirname, 'logs/app.log')
whoami
ps aux | grep node
ls -ld 日志目录
ls -l 日志文件
systemctl cat 你的服务
Debian 上 JS 日志被拒,99% 是“运行用户 ≠ 日志目录拥有者”或 systemd/Docker 限制写入。
如果你愿意,可以贴:
我可以直接帮你定位到具体哪一行配置。