Laravel daily 日志由任务调度生成后无法写入的解决办法

原因分析

首先,日志文件无法写入,根本原因是日志文件的 owner 归属错乱;
由于LOG_CHANNEL=daily,日志文件每天生成,哪一个进程首先写日志,直接影响日志文件的owner;
由 web 端访问,nginx到php,生成的日志文件的 owner 是 www
而 由 crontab 系统计时器调用 Schedule 任务,生成的日志文件的 owner 是 root

owner 是 root 的文件,无法被 www 用户写入


解决办法

  1. 针对 schedule,修改 crontab 使执行者是 www 而不是 root

    我们常用的 crontab -e命令,是为当前用户创建定时任务的,每一行的参数只有时间和命令,故无法达到我们的要求

    此时,我们需要使用vi /etc/crontab,直接编辑系统的定时任务,参数分别是时间,执行用户,命令:

     * * * * * www php /projectpath/artisan schedule:run
    
  2. 针对 queue job,修改 Laravel 队列执行者为www

    本人的环境使用 supervisord,故只需要修改进程配置文件即可:

    • vi /etc/supervisord.d/myproject.ini
    • 修改user参数为 www
若您觉得我的博文对您有帮助,欢迎点击下方按钮对我打赏
打赏