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/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
你走了!
【讨论】:
以上是关于Laravel 5.5:laravel.log 无法打开:权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5:laravel.log 无法打开:权限被拒绝
laravel - 无法以附加模式打开流或文件“/storage/logs/laravel.log”:无法打开流:权限被拒绝
Laravel 7 XAMPP Mac OS:无法打开流或文件“../storage/logs/laravel.log”。没有权限
我的 Laravel 应用程序在 Google Cloud 上出现问题。无法打开流或文件“/srv/storage/logs/laravel.log”