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
附录 项目 部分文件 和权限

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案
su www -s /bin/bash -c "php artisan schedule:run"

最佳答案

1年前 评论
讨论数量: 24

Ubuntu 不是 www-data 用户吗?

1年前 评论

crotnab 记得用相同权限

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

试试这个呢

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

是使用daily 模式吗

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

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

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

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

1年前 评论

file

file

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

file

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

1年前 评论

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

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

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

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

最佳答案

1年前 评论

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