每过一天 laravel log 就会报没权限错误

每过一天 laravel log 就会报没权限错误

每过一天,都会报日志没权限的错误
已经执行过命令 chmod -R 777 storages

是什么原因?


用评论区命令看了下

每过一天 laravel log 就会报没权限错误

fpm 和 log 目录的所属用户确实不一样

但是我用

chown -R www-data:www-data storage

把storage的所属组改了 还是无法写入

每过一天 laravel log 就会报没权限错误

现在是别的错误

Unable to create configured logger. Using emergency logger. {“exception”:”[object]

每过一天 laravel log 就会报没权限错误

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 33

看下是不是有定时任务root执行 导致生成的日志文件是root权限的

4个月前 评论

看下是不是有定时任务root执行 导致生成的日志文件是root权限的

4个月前 评论
ls -l storages
ls -l storages/logs
ps aux | grep nginx
ps aux | grep php

crontab -u www  -l  # 如果有的话
# 查看这几个用户是不是一样
4个月前 评论

有可能你有root或其他高权限用户跑的定时任务,在凌晨创建了日志文件,对其他用户没有写入权限,当执行fpmwww用户写入日志时,提示权限不足。

个人建议:

  1. 检查日志文件初始创建用户;
  2. 跑定时任务可以用www用户或同用户组的权限跑;
  3. 创建日志文件时权限可以适当调高。
4个月前 评论
laaa 4个月前
晏南风 (楼主) 2个月前
laaa 2个月前
晏南风 (楼主) 2个月前
laaa 2个月前

给config/logging.php里的配置加一下permission试试

...
'daily' => [
    'driver' => 'daily',
    'path' => storage_path('logs/laravel.log'),
    'level' => env('LOG_LEVEL', 'debug'),
    'days' => env('LOG_DAYS', 7),
    'permission' => 0666
],
...
4个月前 评论
晏南风 (楼主) 4个月前
神的孩子丶都在跳舞 (作者) 4个月前

有程序先于 fpm 用户(一般是www)创建了权限更高的日志,因此 fpm 无权写入。检查crontab 、supervisor、常驻脚本等,都使用 fpm 相同的用户运行。

4个月前 评论

什么情况下会写日志?

  1. fpm执行的时候
  2. 定时任务执行的时候

没有权限排除:第一项目目录执行权限是否为fpm的执行者(fpm执行用户在php-fpm.conf里 user= 可以查到),定时任务执行者是谁?是root还是跟fpm的一样?如果不是统一执行者,比如下面的

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
4个月前 评论

有没使用Supervisor 有的话可能是这个工具导致的

4个月前 评论
sanders

赞同楼上几位,这每天的周期大概率是定时任务导致的,定时任务执行的时候,要用 fpm 的用户运行,如果是 root 用户运行就用 su 命令切换一下用户。

4个月前 评论

要么定时任务 要么supervisor 不过这两个都可以指定用户运行,先看 php-fpm是什么用户运行的,然后其它的程序执行php脚本的时候就需要设置成什么用户运行

4个月前 评论

就是两个不同的权限用户写入同一个文件的问题,例如www和root。分别写入两个文件就互不影响了

4个月前 评论
打不死的小强

大概率是root先跑的任务创建的文件,其他用户写不进去,看下具体文件的权限,root执行任务的创建的文件给o+w的权限

4个月前 评论

大概率是用root用户跑的定时任务

4个月前 评论
#把你的  root 下的 crontab
crontab -u root -l
# 挪到 www-data下
crontab -u www-data -e
# 然后重新
chmod ...
chown ...


#如果你想手动跑 请 执行 
su www-data
# 而不是在root 下跑   要不还得重新 chmod  chown 
4个月前 评论

BT定时任务使用下边的命令:

su -c "cd /www/wwwroot/blog && php artisan schedule:run >> /dev/null 2>&1" -s /bin/sh www
4个月前 评论

crontab -e -u www-data

用 www-data 用户运行

2个月前 评论
晏南风 (楼主) 2个月前
小李世界 (作者) 2个月前

cli程序执行的时候都用www用户

2个月前 评论
晏南风 (楼主) 2个月前

在cli入口 或者 公共的bootstrap里统一修改用户权限呢

2个月前 评论
晏南风 (楼主) 2个月前
晏南风 (楼主) 2个月前

建议还是不要把日志存这里存es里面好点

2个月前 评论

大概率是root跑了某定时脚本,然后生成了日志。 btw,这个问题甚至在前端会反馈成“跨域问题”非常坑。

2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!