laravel日志无访问权限Permission denied

2023-09-05 15:24:55

laravel项目时不时的报错,日志没有权限写入之类的报错。很是头疼,最后集中时间解决了这个问题。是linux系统机制导致的。我有一个laravel的定时任务,laravel的定时任务是基于linux crontab的,这个定时任务会生成日志,这个日志和laravel的错误日志共用一个文件,如果是crontab先用laravel本身的程序产生日志的话,这个日志是root权限的,而我的laravel产生的日志是apache用户产生的,这样apache就没有权限写入root创建的日志。反过来就没有问题。
我chmod -R 777 laravel-2023-09-05.log 这个文件的时候,也能解决问题。但是这个log文件是每天都会生成的,如果这样做,得搞个定时器来专门修改权限,我觉得不够好。

我的解决方式。直接看最后


搜索网络有三种方案。

    1. 给crontab指定用户运行    crontab -u apache -e  (我觉得有点不妥,万一其他用户也在用crontab,引起不必要的错误)

    2.    Laravel 5.6.10 之后的版本支持对日志文件的权限配置,添加 config/logging.php 文件中的 permission 字段配置:

    

'daily' => [

        'driver' => 'daily',

        'path' => storage_path('logs/laravel.log'),

        'level' => 'debug',

        'days' => 7,

        'permission' => '0664',

    ],


(我的版本是laravel5.5 ,虽然很古老了,但是我不想更换,因为我没有非要更换的理由)

    3.修改vendor代码中创建日志文件的代码,也很简单,就加一个参数。(我认为更不妥呀,这东西改了并不是永久的呀,下次重新部署就没了,就不在这里过多介绍了)


我的解决方式:我直接修改了php-fpm启动的用户,php-fpm以root身份运行。问题就解决了,不管事php-fpm和crontab谁先创建了日志,都是root用户创建的。这样就没有谁没有权限的问题了。 大工高级,完美并且永久的解决了这个问题。


php-fpm以root身份运行,可参考地址  php-fpm以root身份运行

  • 2021-04-13 09:48:45

    消息中间件之MQ详解及四大MQ比较

    消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。

  • 2021-04-13 09:52:18

    Kafka学习之路 Kafka的简介

    Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

  • 2021-04-13 09:53:12

    nodejs操作消息队列RabbitMQ

    消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。 其主要用途:不同进程Process/线程Thread之间通信。

  • 2021-04-15 10:07:49

    Chrome屏蔽Your connection is not private

    使用Fiddler时如何屏蔽Chrome的证书警告:"Your connection is not private"/"您的连接不是私密连接"(如图1所示)? 启动chrome的时候加上--ignore-certificate-errors命令行参数(如图2所示)即可。

  • 2021-04-15 10:10:00

    Puppeteer 系列踩坑日志—3—开启支持插件

    在使用puppeteer自动化的过程中,会发现其实开启的chrome往往自动禁用了插件功能,如果我们想在自动化测试的过程中,再去使用一些常用的插件提升效率(偷懒)的话,就行不通了,其实解决办法还是有的,我们今天就来讲解这个问题。

  • 2021-04-15 10:11:17

    Puppeteer拦截修改返回值

    page.setRequestInterception(true)拦截器的使用方法和场景 现附上Puppeteer的Api的链接https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md