在 Debian 上,Node.js 本身不会自动管日志权限,日志权限通常由你写日志的方式 + 运行 Node.js 的用户 + 文件系统权限共同决定。下面按常见场景说明。
Node.js 以哪个用户运行?
ps -ef | grep node
常见用户:
root(不推荐)www-datanode日志写在哪里?
/var/log/xxx/logs/pm2 / systemd / dockerconst fs = require('fs');
fs.appendFileSync('/var/log/myapp/app.log', 'log\n');
sudo mkdir -p /var/log/myapp
sudo chown -R node:node /var/log/myapp
sudo chmod 750 /var/log/myapp
750:属主可读写执行,组用户可读,其他无权限PM2 默认日志在:
~/.pm2/logs/
pm2 start app.js \
--output /var/log/myapp/out.log \
--error /var/log/myapp/err.log
然后:
sudo chown -R www-data:www-data /var/log/myapp
⚠️ PM2 以谁启动,日志就归谁
/etc/systemd/system/myapp.service
[Service]
User=node
Group=node
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node app.js
StandardOutput=append:/var/log/myapp/app.log
StandardError=append:/var/log/myapp/error.log
然后:
sudo mkdir -p /var/log/myapp
sudo chown -R node:node /var/log/myapp
sudo systemctl restart myapp
✅ 最规范、权限最清晰
stdout/stderrconsole.log('info')
console.error('error')
| 项目 | 建议 |
|---|---|
| 日志目录 | 750 |
| 日志文件 | 640 |
| 运行用户 | 非 root |
| 日志轮转 | logrotate |
sudo nano /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 node node
}
# 权限拒绝
Error: EACCES: permission denied
# 看目录权限
ls -ld /var/log/myapp
# 看进程用户
ps -o user,group,comm -p <pid>
如果你能告诉我:
我可以直接给你一套可复制的配置。