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