【问题标题】:Laravel 5.5: laravel.log could not be opened: Permission deniedLaravel 5.5:laravel.log 无法打开:权限被拒绝
【发布时间】: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 啊。这就说得通了。我对服务器端有点不适应。奇怪的是,它似乎没有错误地工作......但它实际上也没有处理队列。呃
  • 队列是否被处理真的取决于很多原因。例如,我永远无法让队列工作者处理默认队列,我总是必须明确指定它需要处理哪个队列。

标签: laravel amazon-web-services permissions amazon-elastic-beanstalk


【解决方案1】:

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

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

没有什么特别的错误。

【讨论】:

    【解决方案2】:

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

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

    尝试通过在 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
      

      你走了!

      【讨论】:

        猜你喜欢
        • 2015-07-30
        • 2018-07-08
        • 2019-02-10
        • 2020-05-24
        • 1970-01-01
        • 1970-01-01
        • 2020-05-31
        • 2018-05-06
        • 2018-10-03
        相关资源
        最近更新 更多