在 Debian 上设置 Node.js 日志文件的权限,通常要从 日志文件本身、运行 Node.js 的用户、systemd(如果用)、目录权限 这几方面考虑。下面按常见场景说明。
先确认你的 Node.js 进程用户:
ps aux | grep node
常见情况:
root 或当前登录用户www-data、node、appuser 等pm2 启动用户日志文件必须对该用户可读/可写
sudo mkdir -p /var/log/myapp
sudo chown -R appuser:appuser /var/log/myapp
sudo chmod 750 /var/log/myapp
sudo touch /var/log/myapp/app.log
sudo chown appuser:appuser /var/log/myapp/app.log
sudo chmod 640 /var/log/myapp/app.log
含义:
640:属主可读写,组只读,其他无权限const fs = require('fs');
const logStream = fs.createWriteStream('/var/log/myapp/app.log', { flags: 'a' });
确保路径 存在且可写,否则会报 EACCES
[Service]
User=appuser
Group=appuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node index.js
然后:
sudo systemctl daemon-reload
sudo systemctl restart myapp
⚠️ 不要 用 sudo node index.js 跑系统服务
Debian 默认有 logrotate
sudo nano /etc/logrotate.d/myapp
示例:
/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 appuser appuser
}
Error: EACCES: permission denied, open '/var/log/myapp/app.log'
解决:
sudo chown appuser:appuser /var/log/myapp/app.log
即使文件对,目录也要有 x 权限
sudo chmod 750 /var/log/myapp
PM2 以谁启动,日志就属于谁:
pm2 startup
pm2 save
750640如果你愿意,可以告诉我:
我可以给你一套完全适配你环境的权限方案。