在 Ubuntu 上跑 Node.js 时,日志权限问题通常表现为:
sudo 启动和不用 sudo 启动,日志权限混乱下面按「常见原因 → 解决方案」说明。
例如:
root 启动过一次(日志属主变成 root)www-data / node / 当前用户启动检查:
ls -l /var/log/your-app/
Node 不会自动创建多层目录,且父目录无写权限也会失败。
www-data 或 rootsudo useradd -r -s /usr/sbin/nologin nodeapp
sudo mkdir -p /var/log/nodeapp
sudo chown -R nodeapp:nodeapp /var/log/nodeapp
sudo chmod 755 /var/log/nodeapp
sudo -u nodeapp node app.js
sudo chown -R $USER:$USER /var/log/nodeapp
pm2 start app.js
或指定用户:
pm2 start app.js --uid nodeapp --gid nodeapp
/etc/systemd/system/nodeapp.service
[Service]
User=nodeapp
Group=nodeapp
WorkingDirectory=/opt/nodeapp
ExecStart=/usr/bin/node app.js
StandardOutput=append:/var/log/nodeapp/out.log
StandardError=append:/var/log/nodeapp/err.log
然后:
sudo systemctl daemon-reexec
sudo systemctl restart nodeapp
Error: EACCES: permission denied, open '/var/log/xxx.log'✅ 日志文件属主不对
sudo chown nodeapp:nodeapp /var/log/xxx.log
ENOENT: no such file or directory✅ 目录不存在
mkdir -p /var/log/xxx
sudo node 能跑,普通用户不能✅ 不要用 sudo 跑 Node ✅ 修正日志权限即可
/etc/logrotate.d/nodeapp
/var/log/nodeapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0644 nodeapp nodeapp
}
whoami
ps aux | grep node
ls -l /var/log/your-log-dir
如果你愿意,可以告诉我:
我可以直接帮你写一套适合你环境的配置。