laravel 权限不足,fopen(...storage/log/xxx_query.log):Failed to open stream Permission denied

1. 运行环境

PHP8.1  Ubuntu 20.04 LTS 宝塔

1). 当前使用的 Laravel 版本?

laravel 9.6

4). 业务环境

开发环境

2. 问题描述?

晚上0点一过提示
fopen(.../xxx_query.log):Failed to open stream :Permission denied

3. 自己解决过程

1.给 storage  www用户和777权限 结果无效
2.给 storage  root用户和777权限 结果无效

刚刚查到方案 试试明天z
附录 项目 部分文件 和权限

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案
su www -s /bin/bash -c "php artisan schedule:run"

最佳答案

3年前 评论
讨论数量: 24

Ubuntu 不是 www-data 用户吗?

3年前 评论

crotnab 记得用相同权限

3年前 评论
chown -R www:-data:www-data 项目/
或者
chown -R nginx:nginx 项目/

试试这个呢

3年前 评论
ncccc1 (楼主) 3年前
阿珂 (作者) 3年前
declandragon 3年前

是使用daily 模式吗

3年前 评论
ncccc1 (楼主) 3年前
ncccc1 (楼主) 3年前
薄荷蓝的晴天 (作者) 3年前

file 刚刚找到的一个方案 明天再看看会复现吗

3年前 评论
薄荷蓝的晴天 3年前
ncccc1 (作者) (楼主) 3年前

用 crontab -u www-data -e 简洁些

3年前 评论

file

file

3年前 评论
薄荷蓝的晴天 3年前
ncccc1 (作者) (楼主) 3年前
薄荷蓝的晴天 3年前
薄荷蓝的晴天 3年前

file

原因找到 应该是 artisan 运行的是 root 用户造成

3年前 评论

config/logging.php 这样区别一下就可以了

'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/' . php_sapi_name() .'/laravel.log'),
            'level' => getenv('LOG_LEVEL'),
            'days' =>  getenv('LOG_OUTPUT_DAYS'),
        ],
3年前 评论
ncccc1 (楼主) 3年前

如果以 root 用户执行的定时任务先生成 log 文件,那么文件的所有者是 root,nginx 网站用户(例如www)就写不进来,所以要检查非网站用户写入日志的程序,要用网站用户来执行。

3年前 评论
su www -s /bin/bash -c "php artisan schedule:run"

最佳答案

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!