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身份运行