logrotate 日志切割 原理
logrotate 原理
logrotate 是怎么做到滚动日志时不影响程序正常的日志输出呢?logrotate 提供了两种解决方案。
- create
- copytruncate
Linux 文件操作机制
介绍一下相关的 Linux 下的文件操作机制。
Linux 文件系统里文件和文件名的关系如下图。
目录也是文件,文件里存着文件名和对应的 inode 编号。通过这个 inode 编号可以查到文件的元数据和文件内容。文件的元数据有引用计数、操作权限、拥有者 ID、创建时间、最后修改时间等等。文件件名并不在元数据里而是在目录文件中。因此文件改名、移动,都不会修改文件,而是修改目录文件。
借《UNIX 环境高级编程》里的图说一下进程打开文件的机制。
进程每新打开一个文件,系统会分配一个新的文件描述符给这个文件。文件描述符对应着一个文件表。表里面存着文件的状态信息(O_APPEND
/O_CREAT
/O_DIRECT
…)、当前文件位置和文件的 inode 信息。系统会为每个进程创建独立的文件描述符和文件表,不同进程是不会共用同一个文件表。正因为如此,不同进程可以同时用不同的状态操作同一个文件的不同位置。文件表中存的是 inode 信息而不是文件路径,所以文件路径发生改变不会影响文件操作。
create
这也就是默认的方案,可以通过 create 命令配置文件的权限和属组设置;这个方案的思路是重命名原日志文件,创建新的日志文件。详细步骤如下:
- 重命名正在输出日志文件,因为重命名只修改目录以及文件的名称,而进程操作文件使用的是 inode,所以并不影响原程序继续输出日志。
- 创建新的日志文件,文件名和原日志文件一样,注意,此时只是文件名称一样,而 inode 编号不同,原程序输出的日志还是往原日志文件输出。
- 最后通过某些方式通知程序,重新打开日志文件;由于重新打开日志文件会用到文件路径而非 inode 编号,所以打开的是新的日志文件。
如上也就是 logrotate 的默认操作方式,也就是 mv+create 执行完之后,通知应用重新在新文件写入即可。mv+create 成本都比较低,几乎是原子操作,如果应用支持重新打开日志文件,如 syslog, nginx, mysql 等,那么这是最好的方式。
不过,有些程序并不支持这种方式,压根没有提供重新打开日志的接口;而如果重启应用程序,必然会降低可用性,为此引入了如下方式。
copytruncate
该方案是把正在输出的日志拷 (copy) 一份出来,再清空 (trucate) 原来的日志;详细步骤如下:
- 将当前正在输出的日志文件复制为目标文件,此时程序仍然将日志输出到原来文件中,此时,原文件名也没有变。
- 清空日志文件,原程序仍然还是输出到预案日志文件中,因为清空文件只把文件的内容删除了,而 inode 并没改变,后续日志的输出仍然写入该文件中。
如上所述,对于 copytruncate 也就是先复制一份文件,然后清空原有文件。
通常来说,清空操作比较快,但是如果日志文件太大,那么复制就会比较耗时,从而可能导致部分日志丢失。不过这种方式不需要应用程序的支持即可。
logrotate 日志切割 原理相关推荐
- Logrotate日志切割
Logrotate日志切割 1. 配置文件 1.1 配置放在那里 1.2 配置文件参数含义 2. 范例 3. 手动触发测试 在Linux下,日志会不停的增长,为了防止日志文件过大,导致我们无法在日志中 ...
- Linux Logrotate日志切割管理
Logrotate 是 linux 系统用来分割日志的系统工具.Logrotate 可以设置为每天.每周.每月或当日志文件达到一定的大小时处理日志文件,提供自动压缩.删除.分割日志文件的功能.一般 C ...
- Linux logrotate日志切割详解
1,对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己 ...
- Syslog-ng+Rsyslog收集日志:logrotate日志切割、轮询(七)
很多软件都自带切割日志,比如tomcat可以按时间来命名.rsyslog可按日期生成文件,但是并不支持用"%$year%-%$month%-%$day%"这些变量来读取文件(目前版 ...
- Linux日志切割工具logrotate原理和配置详解
前言: 对于Linux系统安全来说,日志文件是及其重要的工具 一.logrotate概念 1.1 概念 logrotate 程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的 ...
- Linux日志切割神器Logrotate的原理和配置详解,建议收藏!!!
对于 Linux 系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分 Nginx日志之类的 CRON脚本,大家似乎遗忘了 Logrotate,争相发 ...
- Linux 日志切割神器 Logrotate 原理和配置详解(附多生产实例)
点击上方"民工哥技术之路",选择"设为星标" 回复"1024"获取独家整理的学习资料! 对于 Linux 系统安全来说,日志文件是极其重要的 ...
- Linux 日志切割神器 Logrotate 原理和配置详解
对于 Linux 系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分 Nginx日志之类的 CRON 脚本,大家似乎遗忘了 Logrotate,争相 ...
- Linux使用logrotate来切割日志文件
程序在运行的时候为了了解运行状态,会输出日志文件,时间久了日志文件会变得非常大,甚至达到GB级别.我在golang应用里使用logrus包来打日志,配置和使用都很方便,就是没有日志分割的功能,应用在线 ...
最新文章
- java加密 des
- jmeter根据循环获取参数_jmeter forEach循环获取response参数值进行接口请求
- editplus 快捷键
- 双非同学,自学编程,毕业一年逆袭百度!
- 在JavaScript中定义枚举的首选语法是什么? [关闭]
- 450B Jzzhu and Sequences 我考研之后做的第一道题
- java实现爬虫_手把手教你从零开始用Java写爬虫
- im即时通讯源码带教程/uniapp即时通讯源码,附安装教程
- 数据链路层之以太网、MAC、MTU详解
- 【PyCharm 使用指南】之 error running
- 【android】Android Studio创建模拟手机虚拟机
- 如何提高学生对计算机英语的兴趣论文,如何培养小学生英语学习的兴趣_英语论文.doc...
- win10隐藏输入法指示器的设置方法
- 极智AI | 目标检测实现分享二:听说克莱今天复出了?详解 YOLOv2 算法与克莱检测
- Java 8 新特性|Collectors.joining()
- Homepod评测:一款音质超棒但低智商的音箱
- 【年入百万】我用真人真事谈谈用脑子赚钱
- Sentinel Dashboard轻松流控
- 随机数生成器(结绳中文app编程)
- 如何启用GPO回送处理
热门文章
- cisco交换机故障Flash空间不足
- TimesTen 数据库复制学习:4. 定义Active Standby Pair复制策略
- php获取路由器ip地址吗,路由器如何查看IP地址? TP-Link路由器查看IP地址的详细图解...
- 英特尔cpu支持Linux,英特尔公布对Icelake CPU的Linux Perf支持
- 直播app开发所需的三方
- 【项目相关技术】:父工程的创建、gitee和IDEA使用、面向接口编程、swagger2测试、自定义异常处理、日志、VO/PO、XXMapping、TODO
- 职教云python题和答案_智慧职教云课堂Python程序设计基础题库及答案
- 机器学习篇——对数线性模型
- ifeq makefile 或语句_makefile ifeq 语句
- ifeq makefile 或语句_Makefile ifeq、ifneq、ifdef和ifndef(条件判断)