在 Debian 上设置 JS(Node.js)应用的日志权限,通常分为 日志文件权限、日志目录权限、运行用户 和 日志轮转(logrotate) 几个方面。下面按常见场景说明。
先确认你的 JS 服务是用什么用户跑的:
ps aux | grep node
常见情况:
node app.js → 当前登录用户User=原则:日志文件必须对该用户可写
sudo mkdir -p /var/log/myapp
假设运行用户是 nodeuser:
sudo chown -R nodeuser:nodeuser /var/log/myapp
sudo chmod 750 /var/log/myapp
日志文件权限一般是:
sudo chmod 640 /var/log/myapp/app.log
说明:
750:属主可读写执行,组用户可读,其他无权限640:属主读写,组只读,其他无
如果你用的是 fs.writeFile / fs.appendFile:
const fs = require('fs');
fs.appendFile('/var/log/myapp/app.log', logText, err => {
if (err) console.error(err);
});
⚠️ 注意:
/var/log 根目录(权限不足)chmod 777(极不安全)PM2 默认日志在:
~/.pm2/logs/
自定义日志路径:
pm2 start app.js --log /var/log/myapp/app.log
然后:
sudo chown -R pm2user:pm2user /var/log/myapp
[Unit]
Description=My Node App
[Service]
User=nodeuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node app.js
StandardOutput=append:/var/log/myapp/app.log
StandardError=append:/var/log/myapp/error.log
[Install]
WantedBy=multi-user.target
然后:
sudo chown -R nodeuser:nodeuser /var/log/myapp
sudo systemctl restart myapp
新建:
sudo nano /etc/logrotate.d/myapp
内容示例:
/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 nodeuser nodeuser
copytruncate
}
测试:
sudo logrotate -d /etc/logrotate.d/myapp
说明:
解决:
sudo chown -R 正确用户 /var/log/myapp
检查:
如果你能告诉我:
我可以给你一份 完全针对性的配置示例。