在 Linux 上给 Node.js 日志文件设置权限,一般从 文件权限、运行用户、目录权限、日志库配置 四个方面考虑。下面按常见场景说明。
查看当前运行用户:
ps -ef | grep node
或
whoami
常见情况:
root(不推荐)wwwnodeappusersudo mkdir -p /var/log/myapp
sudo chown -R appuser:appuser /var/log/myapp
sudo chmod 750 /var/log/myapp
说明:
750:属主可读写执行,组用户可读执行,其他无权限appuser 是 Node.js 运行用户Node.js 第一次写日志会自动创建文件,建议手动建好:
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');
fs.writeFileSync('/var/log/myapp/app.log', 'hello');
或使用日志库(推荐):
const winston = require('winston');
const logger = winston.createLogger({
transports: [
new winston.transports.File({
filename: '/var/log/myapp/app.log'
})
]
});
如果你用 systemd 启动 Node.js:
[Service]
User=appuser
Group=appuser
然后:
sudo systemctl daemon-reload
sudo systemctl restart myapp
✅ 这样 Node 进程就不会用 root 写日志
使用 logrotate:
sudo vim /etc/logrotate.d/myapp
内容示例:
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 640 appuser appuser
}
原因:
解决:
sudo chown -R appuser:appuser /var/log/myapp
原因:
sudo node app.js 启动解决:
目录:750 appuser:appuser
文件:640 appuser:appuser
运行:appuser(非 root)
轮转:logrotate
如果你愿意,可以告诉我:
我可以给你更精确的配置示例。