日志文件的轮循(logrotate)

news2024/11/20 16:24:48

文章目录

  • 日志文件的轮循(logrotate)
    • 轮循基本原理
    • 轮循的基本配置
    • 实际测试logrotate的操作
      • 使用案例
    • 自定义日志文件的轮循功能

日志文件的轮循(logrotate)

日志轮循(logrotate)是一种用于管理日志文件的工具,它可以帮助我们自动地对日志文件进行切割、压缩、删除等操作,以便于节省磁盘空间和方便日志文件的管理。下面是日志轮循的一些详细介绍:

轮循基本原理

日志文件在不断地记录信息,如果不对它进行处理,它会越来越大,最终可能会占满磁盘空间。而轮循的基本原理就是在某个时刻对日志文件进行切割,将已经记录的信息保存到一个新的文件中,同时将旧的日志文件进行压缩或删除。这样,就可以保留一定的日志信息,同时也不会浪费过多的磁盘空间。

它的执行结构有点类似下图

image-20230517211420584

由上图图例我们可以清除地知道,第一次执行时,原本的日志文件会被备份并重命名为messages.1,然后新建一个空的messages文件来存储日志。第二次执行时,messages.1会被备份并重命名为messages.2,messages会被重命名为messages.1,然后新建一个空的messages文件来存储日志。如果设置了保留三个日志文件,那么第四次执行时,最老的日志文件messages.3会被删除并由新的日志文件替换。最近的日志文件轮循后的文件名已经会加上日期参数并保留在系统中,以避免数据丢失。

轮循的基本配置

多久进行一次这样的轮循任务可以在logrotate.conf文件中找到。

[root@localhost ~]#  vim /etc/logrotate.conf 
# 下面的设置是"logrotate"的默认设置值,如果个别的文件设置了其他的参数
# 则将以个别的文件设置为主,若该文件没有设置到的参数则以这个文件的内容为默认值。
weekly             <== 默认每个星期对该日志文件进行一次轮循的任务
rotate 4           <== 保留几个日志文件,默认是保留4个1
create             <== 由于日志文件被更名,因此建立一个新的来继续存储的意思
dateext            <== 就是这个设置值,可以让被轮循的文件名称加上日期。
#compress          <== 被修改的日志文件是否需要压缩,若干日志文件太大则可考虑使用此参数
include /etc/logrotate.d
# 将 /etc/logrotate.d/ 这个目录中的所有文件都读进来执行轮循的任务。
/var/log/wtmp {            <== 仅针对/var/log/wtmp所设置值
    monthly                <== 每个月一次,替换每周
    create 0664 root utmp  <== 指定新建文件的权限与所属账号/组
        minsize 1M         <== 文件容量一定要超过 1M后才进行轮循(略过时间参数)
    rotate 1               <== 仅保留一个,就是仅又wtmp.1保留而已。
}
# 这个wtmp可记录登录者与系统重新启动时的时间与来源主机及登录期间的时间
# 由于具有 minsize 的参数,因此不见得每个月一定会进行一次,要看文件容量。
# 由于仅保留一个日志文件而已,不满意的话可以将它改成 rotate 5。

由这个文件设置我们可以知道/etc/logrotate.d实际上是由/etc/logrotate.conf规划出来的目录。虽然可以把所有数据都写入/etc/logrotate.conf,但是这个文件会非常复杂,不方便维护。所以,将每个服务的日志文件轮循设置独立出来,作为一个文件放置在/etc/logrotate.d/中是一种方便且合理的做法。默认的轮循状态在/etc/logrotate.conf中设置,但各个服务可以自己设置自己的日志文件轮循。

例如,可以将rotate 4修改为rotate 9,保存更多的备份文件;对于占用硬盘空间较多的httpd等服务,可以考虑压缩日志文件。

上面介绍了 /var/log/wtmp 这个文件的设置,logrotate.conf 的设置语法为:

日志文件的绝对路径与文件名 ...{
             个别的参数设置值,如monthly,compress等
}

下面我们再以 /etc/logrotate.d/syslog 这个轮循rsyslog.service 服务的文件,来看看该如何设置它的轮循?

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

在上面的语法当中,我们知道正确的logrotate的写法为:

  • 文件名:被处理的日志文件绝对路径文件名写在前面,可以使用空格符分隔多个日志文件

  • 参数:上述文件名进行轮循的参数使用{}包括起来

  • 执行脚本:可调用外部命令来进行额外的命令执行,这个设置于sharedscripts…endscript 设置合用才行。至于可用的环境为:

    • prerotate:在启动logrotate 之前进行的命令,例如修改日志文件的属性等操作
    • postrotate:在做完logrotate 之后启动的命令,例如重新启动(kill -HUP)某个服务
    • Prerotate与prstrotate对于已经加上特殊属性的文件处理上面,是相当重要的执行程序

    那么 /etc/logrotate.d/syslog 内设置的5个文件轮循功能就变成了:

  • 该设置只对 /var/log/ 内的 cron、maillog、messages、secure、spooler有效

  • 日志文件轮循每周一次,保留4个且轮循下来的日志文件不进行压缩(未更改默认值)

  • 轮循完毕后(postrotate)取得syslog的PID后,以 kill -HUP重新启动syslogd

假设我们有针对 /var/log/messages 这个文件增加 chattr +a 属性时,依据logrotate的工作原理,我们知道,这个/var/log/messages 将会被更名未 /var/log/messages.1。但是由于加上这个 +a 的参数,所以更名是不可能成功的。那怎么办呢?就利用prerotate与postrotate来进行日志文件轮循前、后所需要做的操作。那么你可以这样修改一下文件

[root@localhost ~]# vim /etc/logrotate.d/syslog 
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    prerotate
      /usr/bin/chattr -a /var/log/messages
    endscript
    sharedscripts
    postrotate
      /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
      /usr/bin/chattr +a /var/log/messages
    endscript
}

大概流程就是先给它去掉a 这个属性,让日志文件/var/log/messages 可以进行轮循操作。然后执行了轮循之后,再给他加入这个属性。

/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true解释:

第一部分 /bin/kill -HUPcat /var/run/syslogd.pid 2> /dev/null 表示发送 HUP 信号给进程号为 /var/run/syslogd.pid 的进程,即重启 syslogd 进程。
具体而言,这个命令会先使用 cat 命令读取 /var/run/syslogd.pid 文件中的进程号,然后将进程号传递给 /bin/kill 命令,发送 HUP 信号给该进程。2> /dev/null 表示将标准错误输出重定向到空设备,以防止错误信息被显示出来。如果 cat 命令或 /bin/kill 命令执行出错,进程号不存在或进程已经退出等情况,这个命令不会输出任何错误信息。
第二部分 2> /dev/null || true 表示将标准错误输出重定向到空设备,如果命令执行出错,返回值为非零值,会执行 true 命令,也就是不做任何处理,返回值为零。

这个命令的作用是确保即使重启 syslogd 进程出现错误,也不会导致整个脚本执行失败。

实际测试logrotate的操作

在Linux系统中,我们可以通过手动执行logrotate命令来对日志文件进行轮循。

logrotate [-vf] logfile
选项:
-v:启动显示模式,会显示logrotate运行的过程
-f:不论是否符合配置文件的数据,强制每个日志文件都进行轮循的操作。

使用案例

执行一次logrotate看看整个流程是什么?

[root@localhost ~]# logrotate -v /etc/logrotate.conf 
reading config file /etc/logrotate.conf      # 表示正在读取这个主配置文件;
including /etc/logrotate.d                   # 正在读取目录下的配置文件
reading config file bootlog                  # 正在读取目录下的bootlog配置文件
reading config file chrony                   # 正在读取目录下的chrony配置文件
......
......
......
Handling 8 logs                              # 共有18个日志文件被记录
......
......
......
rotating pattern: /var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
 weekly (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/cron
  log does not need rotating (log has been already rotated)considering log /var/log/maillog
  log does not need rotating (log has been already rotated)considering log /var/log/messages  
  log does not need rotating (log has been already rotated)considering log /var/log/secure
  log does not need rotating (log has been already rotated)considering log 
......
......
......

强制进行logrotate的操作

[root@localhost ~]# logrotate -vf /etc/logrotate.conf 
......
......
......
rotating log /var/log/messages, log->rotateCount is 4
dateext suffix '-20230518'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
......
......
# 看到了吗?整个轮循的操作就是这样一步一步进行的
[root@localhost ~]#  ll /var/log/messages* ; lsattr /var/log/messages
-rw-------. 1 root root    155 518 23:19 /var/log/messages
-rw-------. 1 root root 488944 518 23:11 /var/log/messages-20230518
-----a---------- /var/log/messages
# 主动加入a的隐藏属性

上面哪个-f具有【强制执行】的意思,如果一切的设置都没有问题的话,那么理论上,你的 /var/log 这个目录就会起变化,而且应该不会出现错误信息才对。

下面再做一些例题练习,更详细的了解logrotate功能

自定义日志文件的轮循功能

如果你想要将【所有的信息】都额外写入到/var/log/admin.log应该怎么配置?这个文件时现在,你想要将该文件加上 +a 这个隐藏属性,而且设置下面相关信息

  • 日志文件轮循一个进行一次
  • 该日志文件若大于 10MB时,则主动进行轮循,不需要考虑一个月的期限
  • 保存5个备份文件
  • 备份文件需要压缩

应该怎么设置呢?

  1. 先设置好所需要添加的参数
[root@localhost ~]# vim /etc/rsyslog.conf
# Add by localhost 2023/5/17            # 自己修改时加入一些说明
*.info    /var/log/admin.log
  1. 重启rsyslog.server
[root@localhost ~]# systemctl restart rsyslog.service
[root@localhost ~]# ll /var/log/admin.log 
-rw-------. 1 root root 816 517 10:18 /var/log/admin.log
# 可以看到已经建立了日志文件
# 如此一来。所有信息都会写入 admin.log
  1. 先增加 +a 这个属性
[root@localhost ~]# chattr +a /var/log/admin.log 
[root@localhost ~]# lsattr /var/log/admin.log 
-----a---------- /var/log/admin.log
[root@localhost ~]# mv /var/log/admin.log  /var/log/admin.log.1
mv: 无法将"/var/log/admin.log" 移动至"/var/log/admin.log.1": 不允许的操作
# 这里确定了加入a的隐藏属性,所以root无法移动此日志文件
  1. 开始建立logrotate的配置文件,增加一个文件到/etc/logrotate.d 目录就对了
[root@localhost ~]# vim /etc/logrotate.d/admin
/var/log/admin.log  {
      monthly
      size=10M
      rotate 5
      compress
      sharedscripts
      prerotate
            /usr/bin/chattr -a /var/log/admin.log
      endscript
      sharedscripts
      postrotate
            /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
            /usr/bin/chattr +a /var/log/admin.log
      endscript
}
  1. 测试一下logrotate相关功能的显示信息
[root@localhost ~]# logrotate -v /etc/logrotate.conf
.......
.......
rotating pattern: /var/log/admin.log   10485760 bytes (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/admin.log
  log does not need rotating (log size is below the 'size' threshold)
not running prerotate script, since no logs will be rotated
not running postrotate script, since no logs were rotated
......
......
# 因为不足一个月,文件也没有大于10MB,所以不需要轮循
  1. 测试一下强制 logrotate 与相关功能的显示
[root@localhost ~]# logrotate -vf /etc/logrotate.conf
[root@localhost ~]# lsattr /var/log/admin.log*
-----a---------- /var/log/admin.log
---------------- /var/log/admin.log-20230518.gz

看到了吗?通过这个方式,我们就可以建立起属于自己的logrotate配置文件,很简单方便。尤其要注意/etc/rsyslog.conf 与/etc/logrotate.d/* 文件常常要配合起来一起使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/542551.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EasyRecovery Photo16 for windows数据恢复软件免费版下载安装教程

EasyRecovery Photo16 for windows数据恢复软件免费版下载是一款由Kroll Ontrack公司开发的数据恢复软件&#xff0c;其主要功能是恢复已经删除或损坏的图片文件。该软件可用于恢复各种类型的图片文件&#xff0c;包括JPEG、GIF、BMP、PNG等&#xff0c;同时也支持恢复照片文件…

Thematica: 炫彩主题与黑暗奇观的Vue3之旅

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 一、介绍1.1 博客主题和目的1.2 Vue 3简介二、炫彩主题2.1 准备工作2.2 安装必要依赖2.3 创建Vue项目2.4 设置全局样式

AJax和Axios的讲解

目录 Ajax Ajax基本介绍 同步异步 原生Ajax 原生的Ajax使用方式 Axios 基本介绍 Axios的基本使用 发送 get 请求 发送 post 请求 Axios快速入门 请求方法的别名 练习 Ajax Ajax基本介绍 Ajax: 全称Asynchronous JavaScript And XML&#xff0c;异步的JavaScript和XML…

【每日一题/数学模拟题/进位算术】1073. 负二进制数相加

⭐️前面的话⭐️ 本篇文章介绍【1073. 负二进制数相加】题解&#xff0c;算法标签&#xff1a;【数学】&#xff0c;【思维】&#xff0c;【模拟算术】&#xff0c;展示语言c/java。 &#x1f4d2;博客主页&#xff1a;未见花闻的博客主页 &#x1f389;欢迎关注&#x1f50e…

代码随想录训练营Day38| 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

目录 学习目标 学习内容 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 学习目标 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 学习内容 理论基础 problems/动态规划理论基础.md programmercarl/leetcode-master&#xff08;代码随…

C++的list使用

list 1.list的介绍和使用1.1. list介绍1.2. list的使用1.2.1 list的构造1.2.2. list iterator的使用1.2.3. list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效 1.list的介绍和使用 1.1. list介绍 list是可以在常数范围内在任意位置进行插入…

chatgpt赋能Python-python2的n次方

Python2中实现n次方的方法 Python是一种非常受欢迎的编程语言&#xff0c;其简单易学的特性吸引了大量的开发者前来学习和使用。在Python2中&#xff0c;实现n次方有多种方法&#xff0c;下面就给大家介绍一些。 方法一&#xff1a;使用运算符 在Python2中&#xff0c;可以使…

不重启Linux修改主机名,以CentOS 7举例

在 Linux 中&#xff0c;可以通过修改主机名配置文件的方式更改主机名&#xff0c;不需要重启机器即可立即生效。 下面介绍一下具体步骤&#xff1a; 1、查看原始主机名 比如我的主机名叫small-black 2、使用命令行修改主机名 2.1 修改主机名 首先&#xff0c;使用以下命…

2023年的深度学习入门指南(14) - 不能只关注模型代码

2023年的深度学习入门指南(14) - 不能只关注模型代码 最近&#xff0c;有一张大模型的发展树非常流行&#xff1a; 这个图是相当不错的&#xff0c;对于加深对于Transformer模型编码器、解码器作用的理解&#xff0c;模型的开源和闭源情况等等都相当有帮助&#xff0c;大家使…

尝试Google Bard并对比OpenAI ChatGPT,一个擅长创造性,一个擅长事实查询?

文章目录 尝试Google Bard并对比OpenAI ChatGPT&#xff0c;一个擅长创造性&#xff0c;一个擅长事实查询&#xff1f;Google Bard 的自我介绍Google Bard 暂时不支持中文Google Bard除了支持英语外&#xff0c;还支持日语Google Bard和OpenAI ChatGPT的对比Google Bard的回答O…

音乐宿主软件排行榜前十名,音乐宿主要买正版吗

随着电子音乐的不断发展&#xff0c;一些电子音乐爱好者开始尝试自己编写电子音乐。而编写电子音乐必不可少的一点就是需要一款非常好用的音乐宿主软件&#xff0c;那么今天我们就来说一说音乐宿主软件排行榜前十名以及音乐宿主软件要买正版吗这两个问题。 一、音乐宿主软件排…

数组【C语言】

目录 一维数组的创建和初始化 数组创建 数组的初始化 一维数组的使用 一维数组在内存中的存储 二维数组的创建与初始化 二维数组的创建 二维数组的初始化 二维数组的使用 二维数组在内存中的存储 数组越界 数组名作为函数参数 数组名 一维数组的创建和初始化 数组…

chatgpt赋能Python-python3_8降级3_6

Python3.8降级3.6&#xff0c;你需要知道的一切 在Python语言的世界中&#xff0c;每一个版本带来了新的变化和功能。但是在某些情况下&#xff0c;汲取早期版本的优点也是很必要的。Python3.8之前的版本当中&#xff0c;Python3.6是广泛使用的版本&#xff0c;因为它包含了许…

t检验是基于t分布的

例&#xff1a;鸢尾花的平均花瓣长度为3.5cm&#xff0c;这种说法正确吗&#xff1f; 可以根据假设检验的步骤&#xff0c;进行解决。 /设置原假设与备择假设&#xff1a; 原假设&#xff1a;μ μ0 3.5cm&#xff08;说法正确&#xff09; 备择假设&#xff1a;μ ≠ μ0 ≠…

chatgpt赋能Python-python3_8怎么安装matplotlib

Python3.8怎么安装Matplotlib Matplotlib是一个非常流行的Python可视化库&#xff0c;它可以用来创建各种类型的图形&#xff0c;包括线图、散点图、直方图、饼图和热图等等。在本文中&#xff0c;我们将介绍如何在Python3.8中安装Matplotlib&#xff0c;以及如何使用它来绘制…

chatgpt赋能Python-python3_9_0怎么安装

Python3.9.0的安装指南 Python作为目前世界上使用最广泛的编程语言之一&#xff0c;在数据科学、人工智能、Web开发等领域都有着广泛的应用。而今年10月5日&#xff0c;Python官方发布了最新的稳定版本——Python3.9.0。本文将提供一份简明的Python3.9.0安装指南。 准备工作 …

C++模板类与继承

目录 分类 一、模板类不继承 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;分析 &#xff08;3&#xff09;运行结果 二、模板类继承普通类 &#xff08;1&#xff09;代码 &#xff08;2&#xff09;分析 &#xff08;3&#xff09;运行结果 三、普通类继…

【TCP协议】TCP的运输连接管理-三次握手四次挥手

TCP 的运输连接管理 TCP 是面向连接的协议&#xff0c;运输连接是用来传送 TCP 报文的&#xff0c;TCP 的运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。因此&#xff0c;运输连接就有三个阶段&#xff0c;即&#xff1a;连接建立、数据传输、连接释放。 TCP…

chatgpt赋能Python-python3_6_6怎么用

Python3.6.6的基本介绍 1. Python3的发展历程 自1991年Guido van Rossum创造了Python language以来&#xff0c;Python一直在不断发展和改进。Python3是Python中的最新版本&#xff0c;它对Python2进行了重大升级。Python3.6.6是Python3的一个稳定版本&#xff0c;其中包含了…

chatgpt赋能Python-python3_4安装numpy

Python3.4安装Numpy的SEO指南 Numpy是Python科学计算库之一&#xff0c;它提供了强大的支持&#xff0c;使您可以使用Python进行数学和科学计算。Numpy的安装是许多Python开发者必须掌握的技能&#xff0c;因为它是许多其他库的先决条件。在本SEO指南中&#xff0c;我们将介绍…