Node.js应用部署子域名后出现EACCES权限报错如何解决
Error: EACCES: permission denied, open '/opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/error.log'
该报错本质是cPanel托管环境下,负责运行Node.js应用的Passenger进程没有权限写入系统默认的日志文件。主域名部署的React应用未触发该问题,是因为React为静态站点,不需要Passenger运行服务端逻辑,不会调用该系统日志路径。
解决步骤
1. 调整应用日志输出路径(最优先方案,无需服务商介入)
- 在你的Node.js项目根目录新建
logs文件夹,将该文件夹权限设置为755 - 在项目入口文件(通常是
app.js或index.js)的最顶部添加如下代码,将日志输出路径修改为你自己站点目录下的可写路径,避免写入系统级目录:
const fs = require('fs') const path = require('path') const logPath = path.resolve(__dirname, './logs') // 自动创建日志目录 if (!fs.existsSync(logPath)) { fs.mkdirSync(logPath, { recursive: true }) } // 重定向标准输出、错误输出到自定义日志文件 process.stdout = fs.createWriteStream(path.join(logPath, 'app.log'), { flags: 'a' }) process.stderr = fs.createWriteStream(path.join(logPath, 'error.log'), { flags: 'a' })
- 重新部署代码到子域名对应的站点目录
2. 重启Node.js应用
- 登录cPanel后台,进入「Setup Node.js App」功能页,找到对应子域名的应用条目,点击「Restart」按钮重启应用即可生效
3. 备选方案(上述操作无效时使用)
联系虚拟主机服务商,要求管理员调整/opt/cpanel/ea-ruby27/root/usr/share/passenger/helper-scripts/目录的权限,给你的应用运行账号开放写入权限即可。
内容的提问来源于stack exchange,提问作者Elín Ósk
相关产品推荐
相关产品推荐

