用过Laravel的小伙伴一开始安装完框架后可能都遇到过daily 日志文件写入失败的问题,接下来我们就来详细说下日志文件写入失败的原因以及对应的解决方案。

在讲这个问题之前可能需要简单介绍下Linux系统下的文件的Ownership和Permission。

  • Ownership

    • User

      User是文件的所有者,默认情况下,用户创建了一个文件,该文件的所有者就是该用户。

    • Group

      一个用户组能包含多个用户,所有属于这个组的用户都有相同的权限来访问文件。假设你有一个项目,很多用户都需要访问这个项目文件的权限,你不需要手动赋予这些用户所有权限,你只需要把这些用户加到一个组里面,赋予这些组有访问文件的权限,这样一来就仅仅只有组里面的成员能对文件进行读写操作。

    • Other

      任何其他的用户都能访问文件,因此,给Other用户赋予权限,相当于所有用户都拥有这个权限。

  • Permission

    在 UNIX/Linux 系统中每一个文件和目录都有3中权限,以下就是对三个所有者的讨论。

    • Read:这个权限赋予你打开和读取文件的权限。拥有目录的读权限,你能列出其内容。
    • Write:拥有了读权限,你能修改文件的内容。拥有了目录的写权限,你能添加、移除以及重命名该目录下的文件。考虑一种场景,当你拥有文件的写权限,但是没有文件存储目录的写权限,你还是能修改文件的内容,但不能重命名、移动以及移除目录下的文件。
    • Execute:在Windows系统中,一个可执行的程序通常都有.exe后缀,你能很方便的运行它。在 UNIX/Linux 中,除非被赋予可执行权限,否则你将不能运行该程序。如果未授权可执行权限,你让然可以看并修改程序代码(被授予读和写权限),但是无法运行它。

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 组。

我们知道很多应用系统中的日志是写文件的,且是以日期来命名文件的。所以第一次创建日志的用户就显得尤为重要,如果文件创建的 OnwerGroup 不对,其他的用户触发写入日志文件就会失败。

接下来我们讨论下有多少种不同的用户可能创建日志文件:

  • Crontab中执行的定时任务,跟创建 Crontab 的用户有关,此时创建的文件 OwnerGroup 值分别是该用户以及默认的 Group
  • 一些常驻的后台进程,比如Laravel中的 queue work ,此时创建的日志文件 OwnerGroup 值分别是执行该进程的用户以及所属的默认 Group
  • 正常用户访问网站产生的日志文件,此时创建的日志文件的 OwnerGroup 都是 www-datawww-data 用户是web服务器默认的用户。

由以上的分析,我们大概已经找到了解决问题的方法。

  • 执行用户创建日志文件的权限为 664 比较恰当,这就需要当前用户的umask为 0002
  • 当前执行用户的默认 Group 应该设置为 www-data

下面就说下我的具体解决方案:

指定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,
],

你有什么更好的方法么?欢迎留言!

日志文件写入失败(permission denied)相关推荐

  1. 所属文件不可访问_日志文件写入失败(permission denied)

    用过Laravel的小伙伴一开始安装完框架后可能都遇到过daily 日志文件写入失败的问题,接下来我们就来详细说下日志文件写入失败的原因以及对应的解决方案. 在讲这个问题之前可能需要简单介绍下Linu ...

  2. SSH 登陆失败 Permission denied (publickey) 排错

    SSH 登陆失败 Permission denied (publickey) 排错 1. 问题描述 在阿里云上有一台Ubuntu 18.04 版本的服务器,今天使用 ssh 登陆时报错 "P ...

  3. python读取txt文件写入失败-Python write 函数写文件失败

    工作中涉及到了内容抓取的需求,用 Python 根据Url抓取对应的Html页面,并存储到本地文件,然后程序内继续将本地文件的路径作为参数,调用Node进行杂质过滤和内容提取.但怪的是在Python执 ...

  4. Linux环境下文件写入失败可能原因

    Linux环境下文件写入失败可能原因 一.空间爆满 df -h #查看空间占用情况 二.文件数量inodes超出限制 df -i 解决办法 <1> 使用NetApp的存储服务器则修改ino ...

  5. 解决百度网盘下载时提示本地文件写入失败的问题

    今天开通了百度会员,打算download点文件,一直提示本地文件写入失败 解决办法: 在百度网盘上使用右键超级管理会员权限打开,完美解决.

  6. php 上传文件写入失败,php $_FILES上传失败 error返回值说明

    用PHP上传文件时,我们会用程序去监听浏览器发送过来的文件信息,首先会通 过$_FILES[fieldName]['error']的不同数值来判断此欲上传的文件状态是否正常. $_FILES[fiel ...

  7. 复制文件到服务器提示您需要权限,Ubuntu复制文件时提示Permission denied的解决方法...

    Ubuntu系统把一个文件复制到另一个文件时提示"Permission denied",这个错误提示的意思是认可被拒绝,意味着复制文件的权限发现了问题,那么该怎么解决呢?下面小编就 ...

  8. linux拷贝文件提示没权限,Ubuntu复制文件时提示Permission denied怎么解决?

    Ubuntu系统把一个文件复制到另一个文件时提示"Permission denied",这个错误提示的意思是认可被拒绝,意味着复制文件的权限发现了问题,那么该怎么解决呢? 一.表面 ...

  9. Linux移动文件时提示permission denied

    问题 admin权限下,,在SecureCRTPortable中输入,mv dir1/ dir2 时(将dir1文件夹移动到dir2路径下),错误如下: mv: cannot move 'dir1 ' ...

最新文章

  1. 启用关闭数据库归档(ARCHIVELOG)模式
  2. C#基础解析之Ⅱ【运算符和条件结构】
  3. 如何获取NumPy数组中N个最大值的索引?
  4. 谷歌发布TF新工具:计算速度提升2倍,减少无效参数
  5. TinyXml高速入门(一)
  6. linux使用技巧:自动补全、常用快捷键* ? [] {}
  7. 视觉编码(Visual Encoding)
  8. 《Netkiller Spring Cloud 手札》Spring boot 2.0 mongoTemplate 操作范例
  9. 贪吃蛇代码c语言改分,刚学C语言,想写一个贪吃蛇的代码
  10. 【Spark】Spark ML 机器学习的一个案例
  11. WebLogic安装的目录结构及应用部署的3种方式
  12. 如何开发微信公众号后台
  13. 计算机知识竞赛的策划案,计算机趣味知识竞赛活动策划书
  14. 经济机器是怎样运行的(文字版)-瑞.达利欧
  15. 软件测试的发展前景怎么样 做软件测试有前途吗
  16. 读取TXT文档数据生成词云图
  17. 旅游黄山需要注意的几个问题
  18. OPC与三菱Q系列PLC通信
  19. 三层架构的bussiness层没用?
  20. 快速将有文件的FAT32格式的U盘转NTFS格式(Windows)

热门文章

  1. 推荐一款软件加密授权工具
  2. krpano 常用标签
  3. 离开一线企业,你算老几?(上)
  4. 你在客户那到底算老几
  5. 【netcore】MiniExcel轻量级开源组件使用
  6. 认识新华三官网官网下载网络模拟器HCL的安装了解HCL
  7. 6 --> MAC层协议
  8. c语言调用oracle存储过程,Oracle存储过程
  9. “爆打”团队阿尔法发布 以及 第四周任务
  10. Linux之ARM(IMX6U)裸机汇编LED驱动实验--编译驱动