在 Linux 上部署 Node.js 应用时,日志文件的权限设置通常涉及三个方面:文件/目录权限、运行用户、日志轮转(logrotate)。下面按常见场景给你一个清晰做法。
/var/log/myapp/
├── app.log
├── error.log
useradd -r -s /bin/false nodeapp
mkdir -p /var/log/myapp
chown -R nodeapp:nodeapp /var/log/myapp
chmod 750 /var/log/myapp
Node.js 自动创建日志文件时,权限受 umask 影响:
# 推荐
chmod 640 /var/log/myapp/*.log
640:owner 可读写,group 只读,其他无权限
const fs = require('fs');
fs.writeFileSync('/var/log/myapp/app.log', 'hello\n', { flag: 'a' });
⚠️ 确保 Node 进程用户有写权限
~/.pm2/logs/
或修改日志路径:
pm2 start app.js --log /var/log/myapp/app.log
chown -R nodeapp:nodeapp /var/log/myapp
/etc/logrotate.d/myapp/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 nodeapp nodeapp
sharedscripts
postrotate
pm2 reload myapp > /dev/null 2>&1 || true
endscript
}
如果开 SELinux:
semanage fcontext -a -t var_log_t "/var/log/myapp(/.*)?"
restorecon -Rv /var/log/myapp
❌ Permission denied
→ 用户无写权限
❌ 日志不轮转
→ 没配置 logrotate 或 PM2 没 reload
❌ root 写日志
→ 不安全,不推荐
如果你能告诉我:
我可以给你更精确的配置示例。