在 Linux 上 JS(Node.js)日志权限“错”,通常不是 JS 本身的问题,而是运行用户、目录权限、UMASK、或进程管理方式导致的。下面按最常见原因逐条说明。
例如:
root 启动过一次www / node / ubuntu 用户运行结果:
rootEACCES✅ 解决:
ls -l /path/to/logs
sudo chown -R node:node /path/to/logs
JS 写日志前不会自动建多级目录(部分库会)。
错误示例:
ENOENT: no such file or directory
✅ 解决:
mkdir -p /var/log/myapp
chmod 755 /var/log/myapp
UMASK 为 077 时:
600✅ 查看:
umask
✅ 修改(临时):
umask 022
systemd 默认:
✅ 检查:
systemctl cat myapp
常见修复:
[Service]
User=node
Group=node
WorkingDirectory=/opt/myapp
logrotate 重建文件:
✅ 在 logrotate 中加:
create 0644 node node
宿主机目录权限 ≠ 容器内用户
✅ 解决:
chown -R 1000:1000 ./logs
或 Dockerfile:
USER node
# 1. 看报错
journalctl -u myapp -n 50
# 2. 看文件权限
ls -l /path/logs
# 3. 看进程用户
ps -ef | grep node
# 4. 看 umask
umask
✅ 日志目录单独归属运行用户
✅ 不使用 root 跑 Node
✅ logrotate 明确指定 owner
✅ Docker 内使用非 root 用户
如果你愿意,可以把:
ls -l 日志目录结果贴出来,我可以直接帮你定位是哪一类权限错。