Laravel artisan 写入日志的用户和 fpm 不一致,导致无法写入日志问题

前言

当我们需要使用 artisan 命令行,或者使用 laravel 的定时任务,这个时候写入日志的用户可能默认会属于 root,但 php-fpm 一般都在 php-fpm.conf 文件中指定了我们的用户和用户组属于 www,这时候如果定时任务先写入了日志,我们在调用接口,那么会报无法写入的错误

UnexpectedValueException : The stream or file“/test.com/storage/logs/laravel-2020-04-27.log” could not be opened:failed to open stream: Permission denied

如何解决这个问题。

1. crontab 指定用户执行脚本

crontab -e -u www

2. 更改 laravel logging 日志配置文件

'command' => [
    'driver' => 'daily',
    'path' => storage_path('logs/command/command.log'),
    'days' => 7,
    // 给 command 写入的日志文件赋予权限,允许其它用户也可写入。
    'permission' => '0666'
],

参考文章

Laravel 日志文件权限问题 | Laravel China 社区 (learnku.com)
laravel 修改日志权限

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6
'daily' => [
            'driver' => 'daily',
            'path' => storage_path('logs/' . php_sapi_name() .'/laravel.log'),
            'level' => getenv('LOG_LEVEL'),
            'days' =>  getenv('LOG_OUTPUT_DAYS'),
        ],

我是这样做的

3年前 评论
mowu125 7个月前

额, 这个 'permission' => '0666' 这个参数在 laravel 6.0 LTS版本可用么?

3年前 评论
邢闯洋 (楼主) 3年前

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