我正在尝试在我的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
但我仍然遇到上述错误!任何人都可以解释原因(不只是给出一个解决方案)。
谢谢
所以简单的答案是我正在运行命令ec2-user
。作为解决方案,我可以:
ec2-user
sudo -u webapp php artisan queue:work
)sudo su
切换到root,看看它在部署期间将如何运行(即作为root
)没有什么特别错的。
因此,当您通过ssh登录EBS实例时,您将以ec2-user
身份登录。
我不相信ec2-user
是webapp
组的一部分。
尝试通过在ec2-user
下的Laravel项目的根目录中创建一个ebextension,将.ebextensions/ec2user.config
添加到webapp组
users:
ec2-user:
groups:
- webapp
通过使用命令关闭selinux证明这是问题
sudo setenforce 0
这应该允许写入,但是你已经关闭了服务器范围内增加的安全性。那很糟。转回SELinux
sudo setenforce 1
然后最后使用SELinux允许使用此命令写入文件
sudo chcon -R -t httpd_sys_rw_content_t storage
你要走了!