daily日志文件写入失败的原因及解决方案,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
用过Laravel的小伙伴一开始安装完框架后可能都遇到过daily 日志文件写入失败的问题,接下来我们就来详细说下日志文件写入失败的原因以及对应的解决方案。
在讲这个问题之前可能需要简单介绍下Linux系统下的文件的Ownership和Permission。

linux下文件信息的显示截图

linux下目录的信息显示截图
以上的截图显示了一个文件和文件夹的信息,我们可以看到:
r
代表可读, w
代表可写, x
代表可执行。
第一位文件显示 -
,文件显示 d
。
上面第一张图片, rw-rw-r-—
中。第一组 rw-
表示文件的所有者对文件有可读、可写、不可执行的权限。第二组 rw-
表示文件所属的组内用户对该文件有可读、可写、不可执行的权限。第三组 r-—
表示其他任何用户对该文件有可读、不可写、不可执行的权限。
rw-rw-r--
用二进制表示为 664
,每一位如有权限则为 1
,否则为 0
,第一个三位 rw-
用二进制表示为 110
转化为十进制就是 6
,后面两组依次类推,最后得到 664
。
上面第一张图片的 dior www-data
表示该文件的所有者是 dior
用户,文件属于 www-data
组。
我们知道很多应用系统中的日志是写文件的,且是以日期来命名文件的。所以第一次创建日志的用户就显得尤为重要,如果文件创建的 Onwer
和 Group
不对,其他的用户触发写入日志文件就会失败。
接下来我们讨论下有多少种不同的用户可能创建日志文件:
Crontab
中执行的定时任务,跟创建 Crontab
的用户有关,此时创建的文件 Owner
和 Group
值分别是该用户以及默认的 Group
。
一些常驻的后台进程,比如Laravel中的 queue work
,此时创建的日志文件 Owner
和 Group
值分别是执行该进程的用户以及所属的默认 Group
。
正常用户访问网站产生的日志文件,此时创建的日志文件的 Owner
和 Group
都是 www-data
, www-data
用户是web服务器默认的用户。
由以上的分析,我们大概已经找到了解决问题的方法。
下面就说下我的具体解决方案:
指定www-data用户执行crontab:
sudo crontab -u www-data -e
Laravel中修改创建日志文件的权限:
编辑 confog/logging.php
文件
添加 'permission' => 0664
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'days' => 14,
'permission' => 0664,
],
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注天达云行业资讯频道,感谢您对天达云的支持。