关于laravel的日志权限

2019-05-15

问题

系统在凌晨通过定时任务自动生成当天的日志文件,之后系统在写入日志时候,提示没有权限。

查看日志的权限

1
2
3
4
5
6
$ ls
total 1596
-rw-rw-r-- 1 root root 635 May 11 03:00 laravel-2019-05-11.log
-rw-rw-r-- 1 root root 635 May 12 03:00 laravel-2019-05-12.log
-rw-rw-r-- 1 root root 635 May 13 03:00 laravel-2019-05-13.log
...

分析

使用 crontab 执行定时任务时,默认用户是 root。而 laravel 的用户是 www-data ,是没有权限修改日志的。

解决一

使用 crontab 编辑定时任务列表的时候,是可以指定用户的,默认是编辑 root 用户的任务列表。

1
2
sudo crontab -u root -l
* * * * * /usr/bin/php /var/www/bitcoinsv/artisan schedule:run >> /dev/null 2>&1

可以看见这是之前默认添加的定时任务,和 crontab -l 的执行结果一样

执行 crontab -e 的时候添加 -u 选项,并追加相应的用户名,就可以为指定的用户编辑定时任务列表。

1
2
3
sudo crontab -u www-data -e

//写入定时任务

写入之后查看

1
2
sudo crontab -u www-data -l
* * * * * /usr/bin/php /var/www/bitcoinsv/artisan schedule:run >> /dev/null 2>&1

解决二

更改 storage 文件夹拥有者与 php-fpm.conf 运行用户一致,如 php-fpm.conf 配置为

1
2
3
4
5
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = www-data
group = www-data