米
心情
所有
图集
登录
搜索
原创
史上最全:解决tp框架cli脚本创建的文件所属root,php-fpm创建文件所属Nginx:apache导致log文件写入不了
米醋儿
发布于:2021-12-02
tp框架cli脚本创建的文件所属root,php-fpm创建文件所属Nginx:apache导致log文件写入不了。具体场景重现如下: 每月1号,系统会报错,主要原因是无权限写入缓存文件如 runtime/log/202112/xxx.log。几经分析发现,PHP-fpm的权限也属于NginxApache,没有问题,但是创建的文件夹属于root组。 [](http://micuer.com/data/avatar/20211202/cff86ac650273d0ab5553bb43e1461cb.png) 所以,当用url形式访问的时候会报错。因为Nginx组无法操作root组下的文件。 一开始我们觉得是php-fpm的用户组不对,但是排除了。最终定位是cli脚本导致的。由于定时任务执行的cli脚本属于root组,所以创建的文件夹也属于root组,当url形式再访问的时候就无法写入了。 情况已经说明的很清楚了,具体解决办法如下: 1:cli脚本时候,当需要用的log写入的时候,可以自建一个方法。 ``` function logWrite($info, $filename = '', $path = '') { if (!$filename) { $filename = date('Ymd') .'.log'; } if (!$path) { $path = './runtime/log/'. date('Ym') .'/'; if (!is_dir($path)) { mkdir($path, 0755, true); } exec("chown apache:apache -R {$path}"); } return file_put_contents($path . $filename, $info . PHP_EOL, FILE_APPEND); } ``` 这里注意,exec函数需要开启才行。 2:定时任务 以 Nginx:Apache运行 修改定时脚本的运行机制,移动到/etc/crontab ,并指定用户为apache /etc/crontab 指定用户配置格式 * * * * * user-name command 参考:https://www.cnblogs.com/wangxiangdong/p/15068623.html 小编未做尝试。 3:修改代码底层框架 以thinkphp5示例 ``` 编辑脚本文件//thinkphp/library/think/log/driver/File.php $destination = $this->getMasterLogFile(); $path = dirname($destination); if (PHP_SAPI != 'cli') { !is_dir($path) && mkdir($path, 0755, true); }else{ !is_dir($path) && mkdir($path, 0777, true) && chmod($path, 0777); } ``` 但是上面只能修改文件夹的权限,并没有修改文件夹下具体的.log文件的权限。 【解决办法】: 修改文件:\thinkphp\library\think\log\driver\File.php里的write()函数 ``` protected function write($message, $destination, $apart = false, $append = false) { ... if (PHP_SAPI == 'cli') { $message = $this->parseCliLog($info); } else { // 添加调试日志 $this->getDebugLog($info, $append, $apart); $message = $this->parseLog($info); } //return error_log($message, 3, $destination); /** By micuer.com Start */ if (!is_file($destination)) { $first = true; } $ret = error_log($message, 3, $destination); try { if (isset($first) && is_file($destination)) { chmod($destination, 0777); unset($first); } } catch (\Exception $e) { } return $ret; /** By micuer.com End */ } ```
注:原创不易,转载请注明出处(
https://micuu.com/new/2417.html
),本站所有资源来源于网络收集,如有侵权请联系QQ245557979进行清除。
最后修改与 2022-02-22
上一篇:
时间过的快,转眼已经12月了
下一篇:
每次想写的心情相关的文章,最终也没有写完
留言反馈
请先登录
问题反馈渠道,如有软件无法下载或者其他问题可反馈。【由于某种原因,目前留言不展示】
用户需要登录后才能留言反馈
立即留言
珍藏视频
10分钟高效燃脂
30天高效瘦脸操
5分钟缓解颈椎操
友人
微博
全民K歌
唱吧
今日头条
悠悠网
科技小锅盖
彼岸桌面
阮一峰
laravel社区
V2ex
掘金
更多>