laravel的日志权限 页面报错
命令行脚本运行时报错
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 ], ]