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

Laravel 5.5:无法打开Laravel.log:权限被拒绝,laravel,amazon-web-services,permissions,amazon-elastic-beanstalk,Laravel,Amazon Web Services,Permissions,Amazon Elastic Beanstalk,我试图在我的Elastic Beanstalk实例上运行一个简单的Laravel命令行:php artisan队列:work 但我一直得到以下错误: 在StreamHandler.php第107行中: 无法创建流或文件“/var/app/current/storage/logs/laravel.log” 无法打开:无法打开流:权限被拒绝 我已经尝试了我能找到的所有解决方案(除了chmod-R 777建议,它似乎到处都在跟踪这个问题) 我已尝试删除现有的laravel.log,然后使用touch创

我试图在我的Elastic Beanstalk实例上运行一个简单的Laravel命令行:
php artisan队列:work

但我一直得到以下错误:

在StreamHandler.php第107行中:

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

我已经尝试了我能找到的所有解决方案(除了
chmod-R 777
建议,它似乎到处都在跟踪这个问题)

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

我也试过:

sudo chmod -R 755 /var/app/current/storage/
sudo chown -R webapp /var/app/current/storage/
当我列出logs目录时,所有内容都与我认为的一样:

-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
但我还是得到了上面的错误!谁能解释一下原因(而不仅仅是给出一个解决方案)


谢谢

当您通过ssh登录到EBS实例时,您是以
ec2用户的身份登录的

我不相信
ec2用户
是真正执行PHP&apache/nginx的
webapp
组的一部分

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

users:
  ec2-user:
    groups:
      - webapp

当您通过ssh登录到EBS实例时,您将以
ec2用户的身份登录

我不相信
ec2用户
是真正执行PHP&apache/nginx的
webapp
组的一部分

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

users:
  ec2-user:
    groups:
      - webapp

因此,简单的答案是,我是以
ec2用户的身份运行命令的。作为解决方案,我可以:

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

  • 没有什么特别的错误。

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

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

  • 没有什么特别错误。

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

    sudo setenforce 0
    
    这应该允许写入,但您已经关闭了服务器范围的附加安全性。那太糟糕了。将SELinux转回

    sudo setenforce 1
    
    然后最后使用SELinux允许使用此命令写入文件

    sudo chcon -R -t httpd_sys_rw_content_t storage
    

    你走了

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

    sudo setenforce 0
    
    这应该允许写入,但您已经关闭了服务器范围的附加安全性。那太糟糕了。将SELinux转回

    sudo setenforce 1
    
    然后最后使用SELinux允许使用此命令写入文件

    sudo chcon -R -t httpd_sys_rw_content_t storage
    

    你走了

    您的工作人员以什么用户身份运行?请尝试运行
    sudo-uwebapp php artisan queue:work
    @apokryfos Ah。这是有道理的。我对服务器端有点不适应。奇怪的是,它似乎工作没有错误。。。但实际上它也没有处理队列。但是,队列是否得到处理实际上取决于很多原因。例如,我无法让队列工作者处理默认队列,我始终必须明确指定它需要处理的队列。你的工作者以什么用户身份运行?尝试运行
    sudo-u webapp php artisan queue:work
    @apokryfos Ah。这是有道理的。我对服务器端有点不适应。奇怪的是,它似乎工作没有错误。。。但实际上它也没有处理队列。但是,队列是否得到处理实际上取决于很多原因。例如,我永远无法让队列工作者处理默认队列,我总是必须明确指定它需要处理的队列。