Laravel 5.5:laravel.log 无法打开:权限被拒绝

Posted

技术标签:

【中文标题】Laravel 5.5:laravel.log 无法打开:权限被拒绝【英文标题】:Laravel 5.5: laravel.log could not be opened: Permission denied 【发布时间】:2018-09-14 04:45:18 【问题描述】:

我正在尝试在我的 Elastic Beanstalk 实例上运行一个简单的 Laravel 命令行:php artisan queue:work

但我不断收到以下错误:

在 StreamHandler.php 第 107 行:

流或文件“/var/app/current/storage/logs/laravel.log”可以 未打开:无法打开流:权限被拒绝

我已经尝试了所有可以在 SO 上找到的解决方案(chmod -R 777 建议除外,该建议似乎随处可见)。

我尝试删除现有的laravel.log,然后使用touch 创建一个新的,然后确保webapp 是所有者。

我也试过了:

sudo chmod -R 755 /var/app/current/storage/
sudo chown -R webapp /var/app/current/storage/

当我列出日志目录时,一切看起来都像我认为的那样:

-rwxr-xr-x 1 webapp webapp     0 Apr  4 14:38 laravel.log

存储目录看起来也不错:

drwxr-xr-x  6 webapp webapp   4096 Apr  3 19:33 storage

但我仍然收到上述错误!谁能解释原因(不仅仅是给出解决方案)。

谢谢

【问题讨论】:

您的工作人员以什么用户身份运行? 尝试运行sudo -u webapp php artisan queue:work @apokryfos 啊。这就说得通了。我对服务器端有点不适应。奇怪的是,它似乎没有错误地工作......但它实际上也没有处理队列。呃 队列是否被处理真的取决于很多原因。例如,我永远无法让队列工作者处理默认队列,我总是必须明确指定它需要处理哪个队列。 【参考方案1】:

所以简单的答案是我以ec2-user 运行命令。作为解决方案,我可以:

    更改 laravel.log 的所有权为ec2-user 以所有者身份运行命令(例如sudo -u webapp php artisan queue:work) 使用sudo su 切换到root 以查看它在部署期间的运行方式(即root

没有什么特别的错误。

【讨论】:

【参考方案2】:

当您通过 ssh 登录 EBS 实例时,您会以ec2-user 的身份登录。

我不相信 ec2-user 是实际执行 PHP 和 apache/nginxwebapp 组的一部分。

尝试通过在 Laravel 项目的根目录下的 .ebextensions/ec2user.config 下创建一个 ebextension 来将您的 ec2-user 添加到 webapp 组

users:
  ec2-user:
    groups:
      - webapp

【讨论】:

【参考方案3】:

通过使用命令关闭 selinux 来证明这是问题

sudo setenforce 0

这应该允许写入,但您已关闭添加的服务器范围的安全性。那很糟。关闭 SELinux

sudo setenforce 1

然后最终使用 SELinux 允许使用此命令写入文件

sudo chcon -R -t httpd_sys_rw_content_t storage

你走了!

【讨论】:

以上是关于Laravel 5.5:laravel.log 无法打开:权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2 无法打开 laravel.log

Laravel 5:laravel.log 无法打开:权限被拒绝

laravel.log权限被拒绝错误

laravel - 无法以附加模式打开流或文件“/storage/logs/laravel.log”:无法打开流:权限被拒绝

Laravel 7 XAMPP Mac OS:无法打开流或文件“../storage/logs/laravel.log”。没有权限

我的 Laravel 应用程序在 Google Cloud 上出现问题。无法打开流或文件“/srv/storage/logs/laravel.log”