命令行脚本运行时报错

UnexpectedValueException  : The stream or file "/Data/PMS/storage/logs/laravel-2019-04-17.log" could not be opened: failed to open stream: Permission denied 

查看文件权限

    -rw-r--r--  1 www_data  www_data    37K Apr 17 11:06 laravel-2019-04-17.log

有时候 laravel 会出现无权限写日志的问题,我们可以按以下步骤去检查:

运行 laravel 的 php-fpm 是什么用户,一般是 www/nobody,不要使用 root。

laravel 项目中的 storage/logs 目录 www/nobody 用户是否有读写权限。

是否有运行 crontab/supervisor/laravel 脚本,切运行的用户是否是 www/nobody。注意!如果以其他身份(例如 root)运行脚本,laravel 可能会创建当天的日志文件,那这个日志文件是属于其他用户的,www/nobody 用户无法写入。

解决办法

修改 php-fpm 的配置文件,修改 user 和 group 为 www/nobody。

    chmod a+w storage/logs

运行任何 laravel 的脚本需要注意运行的用户,supervisor 可以设置用户,crontab 可以加在 www/nobody 用户下。手动运行脚本可以 su www/nobody。

执行 crontab -e 的时候添加 -u 选项,并追加相应的用户名,就可以为指定的用户编辑定时任务列表。

    $ crontab -u nobody -e
    * * * * * edit the command you want to execute for user nobody

执行 crontab -u nobody -l 选项可以查看 nobody 用户的任务列表。

    $ crontab -u nobody -l    
    * * * * * command one for user nobody
    * * * * * command two for user nobody

web页面运行时报错,已经创建了这个文件,这是 php-fpm的用户与命令行用户不一致导致的,可以通过修改用户解决这个问题,但是还有更好的办法 

更好的办法 config/logging.php 文件增加 daily->permission 配置 'permission' => 0666, 框架版本为 Laravel Framework 5.8.11。详情请看https://www.cnblogs.com/hailspace/p/10775239.html

框架版本为 Laravel Framework 5.8.11

    'channels' => [
         //自定义频道
         'mylog' => [
              // 日志驱动模式:
              'driver' => 'daily',
              // 日志存放路径
              'path' => storage_path('logs/mylog.log'),
              // 日志等级:
              'level' => 'info',
              // 日志分片周期,多少天一个文件
              'days' => 1,
              'permission'=>0666
        ],
    ]