在 Debian 上,JS 日志权限问题通常指 Node.js 应用写日志时报错,比如:
EACCES: permission denied, open '/var/log/xxx.log'Error: Cannot write file (Permission denied)下面按常见场景给你一套排查与解决方案。
ps aux | grep node
假设看到:
www-data 1234 node app.js
说明是 www-data 用户。
ls -ld /var/log/myapp
ls -l /var/log/myapp/app.log
正常应类似:
drwxr-x--- www-data www-data /var/log/myapp
sudo mkdir -p /var/log/myapp
sudo chown -R www-data:www-data /var/log/myapp
sudo chmod 750 /var/log/myapp
JS 代码:
const fs = require('fs');
fs.appendFileSync('/var/log/myapp/app.log', 'log\n');
mkdir -p ~/logs
const logPath = require('os').homedir() + '/logs/app.log';
/etc/systemd/system/myapp.service
[Service]
User=www-data
Group=www-data
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node app.js
然后:
sudo systemctl daemon-reexec
sudo systemctl restart myapp
日志目录确保 www-data 可写。
pm2 startup
pm2 save
如果你用 sudo pm2 启动,但日志目录属于普通用户:
sudo chown -R $USER:$USER ~/.pm2
RUN mkdir -p /var/log/myapp \
&& chown -R node:node /var/log/myapp
user: "1000:1000"
winstonpinobunyan示例(winston):
const winston = require('winston');
winston.add(new winston.transports.File({
filename: '/var/log/myapp/app.log'
}));
如果你能贴出:
我可以直接帮你对症下药。