`

第十九章 登录文件的轮替(logrotate)

 
阅读更多
   假设我们已经将登录数据写入了记录档中了,也已经利用 chattr 配置了 +a 这个属性了,那么该如何进行 logrotate 的工作呢?这里请特别留意的是:『syslog 利用的是 daemon 的方式来启动的, 当有需求的时候立刻就会被运行的,但是 logrotate 却是在规定的时间到了之后才来进行登录文件的轮替, 所以这个 logrotate 程序当然就是挂在 cron 底下进行的呦!』 仔细看一下 /etc/cron.daily/ 里面的文件,嘿嘿~看到了吧! /etc/cron.daily/logrotate 就是记录了每天要进行的登录文件轮替的行为啦! ^_^!底下我们就来谈一谈怎么样设计这个 logrotate 吧!

logrotate 的配置档

既然 logrotate 主要是针对登录文件来进行轮替的动作,所以罗,他当然必须要记载『 在什么状态下才将登录文件进行轮替』的配置啊!那么 logrotate 这个程序的参数配置档在哪里呢?呵呵!那就是:

/etc/logrotate.conf
/etc/logrotate.d/

那个 logrotate.conf 才是主要的参数文件,至於 logrotate.d 是一个目录, 该目录里面的所有文件都会被主动的读入 /etc/logrotate.conf 当中来进行!另外,在 /etc/logrotate.d/ 里面的文件中,如果没有规定到的一些细部配置,则以 /etc/logrotate.conf 这个文件的规定来指定为默认值!

好了,刚刚我们提到 logrotate 的主要功能就是将旧的登录文件移动成旧档, 并且重新创建一个新的空的文件来记录,他的运行结果有点类似底下的图示:

tu

由上面的图示我们可以清楚的知道,当第一次运行完 rotate 之后,原本的 messages 会变成 messages.1 而且会制造一个空的 messages 给系统来储存登录文件。而第二次运行之后,则 messages.1 会变成 messages.2 而 messages 会变成 messages.1 ,又造成一个空的 messages 来储存登录文件!那么如果我们仅配置保留三个登录文件而已的话,那么运行第四次时,则 messages.3 这个文件就会被删除,并由后面的较新的保存登录文件所取代!基本的工作就是这样啦!

那么多久进行一次这样的 logrotate 工作呢?这些都记录在 logrotate.conf里面,我们来看一下默认的 logrotate 的内容吧!

[root@www ~]# vim /etc/logrotate.conf
# 底下的配置是 "logrotate 的默认配置值" ,如果个别的文件配置了其他的参数,
# 则将以个别的文件配置为主,若该文件没有配置到的参数则以这个文件的内容为默认值!

weekly    <==默认每个礼拜对登录文件进行一次 rotate 的工作
rotate 4  <==保留几个登录文件呢?默认是保留四个!
create    <==由於登录文件被更名,因此创建一个新的来继续储存之意!
#compress <==被更动的登录文件是否需要压缩?如果登录文件太大则可考虑此参数启动

include /etc/logrotate.d
# 将 /etc/logrotate.d/ 这个目录中的所有文件都读进来运行 rotate 的工作!

/var/log/wtmp {       <==仅针对 /var/log/wtmp 所配置的参数
    monthly           <==每个月一次,取代每周!
    minsize 1M        <==文件容量一定要超过 1M 后才进行 rotate (略过时间参数)
    create 0664 root utmp <==指定新建文件的权限与所属帐号/群组
    rotate 1          <==仅保留一个,亦即仅有 wtmp.1 保留而已。
}
# 这个 wtmp 可记录登陆者与系统重新启动时的时间与来源主机及登陆期间的时间。
# 由於具有 minsize 的参数,因此不见得每个月一定会进行一次喔!要看文件容量。
# 由於仅保留一个登录文件而已,不满意的话可以将他改成 rotate 5 吧!


由这个文件的配置我们可以知道 /etc/logrotate.d 其实就是由 /etc/logrotate.conf 所规划出来的目录,所以,其实我们可以将所有的数据都给他写入 /etc/logrotate.conf 即可,但是这样一来这个文件就实在是太复杂了,尤其是当我们使用很多的服务在系统上面时, 每个服务都要去修改 /etc/logrotate.conf 的配置也似乎不太合理~ 所以,如果独立出来一个目录,那么每个以 RPM 打包方式所创建的服务的登录文件轮替配置, 就可以独自成为一个文件,并且放置到 /etc/logrotate.d/ 当中即可,真是方便又合理的做法啊! ^_^

一般来说,这个 /etc/logrotate.conf 是『默认的轮替状态』而已, 我们的各个服务都可以拥有自己的登录文件轮替配置,你也可以自行修改成自己喜欢的样式啊! 例如,如果你的系统的空间够大,并且担心除错以及黑客的问题,那么可以:

将 rotate 4 改成 rotate 9 左右,以保存较多的备份文件;
大部分的登录文件不需要 compress 罗!但是空间太小就需要 compress !尤其是很占磁盘空间的 httpd 更需要 compress 的!
好了,上面我们大致介绍了 /var/log/wtmp 这个文件的配置,现在你知道了 logrotate.conf 的配置语法是:

登录文件的绝对路径档名 ... {
	个别的参数配置值,如 monthly, compress 等等
}


底下我们再以 /etc/logrotate.d/syslog 这个轮替 syslog 服务的文件,来看看该如何配置他的 rotate 呢?

[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {
  sharedscripts
  postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
  endscript
}


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

档名:被处理的登录文件绝对路径档名写在前面,可以使用空白字节分隔多个登录文件;
参数:上述档名进行轮替的参数使用 { } 包括起来;
运行脚本:可呼叫外部命令来进行额外的命令下达,这个配置需与 sharedscripts .... endscript 配置合用才行。至於可用的环境为:
prerotate:在启动 logrotate 之前进行的命令,例如修改登录文件的属性等动作;
postrotate:在做完 logrotate 之后启动的命令,例如重新启动 (kill -HUP) 某个服务!
Prerotate 与 postrotate 对於已加上特殊属性的文件处理上面,是相当重要的运行程序!
那么 /etc/logrotate.d/syslog 内配置的六个文件的轮替功能就变成了:

该配置只对 /var/log/ 内的 messages, secure, maillog, spooler, boot.log, cron 有效;
登录文件轮替每周一次、保留四个、且轮替下来的登录文件不进行压缩(未更改默认值);
轮替完毕后 (postrotate) 取得 syslog 的 PID 后,以 kill -HUP 重新启动 syslogd
假设我们有针对 /var/log/messages 这个文件添加 chattr +a 的属性时, 依据 logrotate 的工作原理,我们知道,这个 /var/log/messages 将会被更名成为 /var/log/messages.1 才是。但是由於加上这个 +a 的参数啊,所以更名是不可能成功的! 那怎么办呢?呵呵!就利用 prerotate 与 postrotate 来进行登录文件轮替前、后所需要作的动作啊! 果真如此时,那么你可以这样修改一下这个文件喔!

[root@www ~]# vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler \
/var/log/boot.log /var/log/cron {
  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
    /bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
    /usr/bin/chattr +a /var/log/messages
  endscript
}


看到否?就是先给他去掉 a 这个属性,让登录文件 /var/log/messages 可以进行轮替的动作, 然后运行了轮替之后,再给他加入这个属性!请特别留意的是,那个 /bin/kill -HUP ... 的意义,这一行的目的在於将系统的 syslogd 重新以其参数档 (syslog.conf) 的数据读入一次!也可以想成是 reload 的意思啦! 由於我们创建了一个新的空的纪录档,如果不运行此一行来重新启动服务的话, 那么记录的时候将会发生错误呦!(请回到第十七章读一下 kill 后面的 signal 的内容说明)

实际测试 logrotate 的动作

好了,配置完成之后,我们来测试看看这样的配置是否可行呢?给他运行底下的命令:

[root@www ~]# logrotate [-vf] logfile
选项与参数:
-v  :启动显示模式,会显示 logrotate 运行的过程喔!
-f  :不论是否符合配置档的数据,强制每个登录文件都进行 rotate 的动作!

范例一:运行一次 logrotate 看看整个流程为何?
[root@www ~]# logrotate -v /etc/logrotate.conf
reading config file /etc/logrotate.conf <==读取主要配置档
including /etc/logrotate.d              <==呼叫外部的配置
reading config file acpid               <==就是外部配置啊!
....(中间省略)....
Handling 21 logs                        <==共有 21 个登录文件被记录
....(中间省略)....
rotating pattern: /var/log/messages /var/log/secure /var/log/maillog \
/var/log/spooler /var/log/boot.log /var/log/cron  weekly (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/messages       <==开始处理 messages
  log does not need rotating            <==因为时间未到,不需要更动!
....(底下省略)....

范例二:强制进行 logrotate 的动作
[root@www ~]# logrotate -vf /etc/logrotate.conf
....(前面省略)....
rotating log /var/log/messages, log->rotateCount is 4
renaming /var/log/messages.4 to /var/log/messages.5 (rotatecount 4, logstart 1, i 4),
renaming /var/log/messages.3 to /var/log/messages.4 (rotatecount 4, logstart 1, i 3),
renaming /var/log/messages.2 to /var/log/messages.3 (rotatecount 4, logstart 1, i 2),
renaming /var/log/messages.1 to /var/log/messages.2 (rotatecount 4, logstart 1, i 1),
renaming /var/log/messages.0 to /var/log/messages.1 (rotatecount 4, logstart 1, i 0),
old log /var/log/messages.0 does not exist
....(底下省略)....
# 看到否?整个 rotate 的动作就是这样一步一步进行的~

[root@www ~]# ll /var/log/messages*; lsattr /var/log/messages
-rw------- 1 root root    63 Apr  8 15:19 /var/log/messages
-rw------- 1 root root   670 Apr  8 14:22 /var/log/messages.1
-rw------- 1 root root 24984 Apr  1 19:26 /var/log/messages.2
-rw------- 1 root root  1911 Mar 28 11:32 /var/log/messages.3
-rw------- 1 root root 25193 Mar 22 04:02 /var/log/messages.4
-----a------- /var/log/messages <==主动加入 a 的隐藏属性罗!


上面那个 -f 具有『强制运行』的意思,如果一切的配置都没有问题的话,那么理论上,你的 /var/log 这个目录就会起变化罗!而且应该不会出现错误信息才对!嘿嘿!这样就 OK 了!很棒不是吗?!

由於 logrotate 的工作已经加入 crontab 里头了!所以现在每天系统都会自动的给他查看 logrotate 罗!不用担心的啦!只是要注意一下那个 /var/log/messages 里头是否常常有类似底下的字眼:

Apr 8 15:19:47 www syslogd 1.4.1: restart (remote reception).
这说明的是 syslogd 重新启动的时间啦 (就是因为 /etc/logrotate.d/syslog 的配置之缘故!) 底下我们来进行一些例题的练习,让你更详细的了解 logrotate 的功用啊!

自订登录文件的轮替功能

假设前提是这样的,前一小节当中,假设你已经创建了 /var/log/admin.log 这个文件, 现在,你想要将该文件加上 +a 这个隐藏标签,而且配置底下的相关资讯:

登录文件轮替一个月进行一次;
该登录文件若大於 10MB 时,则主动进行轮替,不需要考虑一个月的期限;
保存五个备份文件;
备份文件需要压缩

那你可以怎么样配置呢?呵呵~很简单啊!看看底下的动作吧!

# 1. 先创建 +a 这个属性啊!
[root@www ~]# chattr +a /var/log/admin.log
[root@www ~]# lsattr /var/log/admin.log
-----a------- /var/log/admin.log
[root@www ~]# mv /var/log/admin.log /var/log/admin.log.1
mv: cannot move `/var/log/admin.log' to `/var/log/admin.log.1': 
Operation not permitted
# 这里确定了加入 a 的隐藏属性!所以 root 无法移动此登录文件!

# 2. 开始创建 logrotate 的配置档,添加一个文件在 /etc/logrotate.d 内就对了!
[root@www ~]# vi /etc/logrotate.d/admin
# This configuration is from VBird 2009/04/08
/var/log/admin.log {
        monthly   <==每个月进行一次
        size=10M  <==文件容量大於 10M 则开始处置
        rotate 5  <==保留五个!
        compress  <==进行压缩工作!
        sharedscripts
        prerotate
                /usr/bin/chattr -a /var/log/admin.log
        endscript
        sharedscripts
        postrotate
                /usr/bin/killall -HUP syslogd
                /usr/bin/chattr +a /var/log/admin.log
        endscript
}

# 3. 测试一下 logrotate 相关功能的资讯显示:
[root@www ~]# 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
not running prerotate script, since no logs will be rotated
not running postrotate script, since no logs were rotated
....(底下省略)....
# 因为还不足一个月,文件也没有大於 10M,所以不需进行轮替!

# 4. 测试一下强制 logrotate 与相关功能的资讯显示:
[root@www ~]# logrotate -vf /etc/logrotate.d/admin
reading config file /etc/logrotate.d/admin
reading config info for /var/log/admin.log

Handling 1 logs

rotating pattern: /var/log/admin.log  forced from command line (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/admin.log
  log needs rotating
rotating log /var/log/admin.log, log->rotateCount is 5
renaming /var/log/admin.log.5.gz to /var/log/admin.log.6.gz (rotatecount 5, logstart 1, i 5),
old log /var/log/admin.log.5.gz does not exist
renaming /var/log/admin.log.4.gz to /var/log/admin.log.5.gz (rotatecount 5, logstart 1, i 4),
old log /var/log/admin.log.4.gz does not exist
renaming /var/log/admin.log.3.gz to /var/log/admin.log.4.gz (rotatecount 5, logstart 1, i 3),
old log /var/log/admin.log.3.gz does not exist
renaming /var/log/admin.log.2.gz to /var/log/admin.log.3.gz (rotatecount 5, logstart 1, i 2),
old log /var/log/admin.log.2.gz does not exist
renaming /var/log/admin.log.1.gz to /var/log/admin.log.2.gz (rotatecount 5, logstart 1, i 1),
old log /var/log/admin.log.1.gz does not exist
renaming /var/log/admin.log.0.gz to /var/log/admin.log.1.gz (rotatecount 5, logstart 1, i 0),
old log /var/log/admin.log.0.gz does not exist
log /var/log/admin.log.6.gz doesn't exist -- won't try to dispose of it
running prerotate script
renaming /var/log/admin.log to /var/log/admin.log.1
running postrotate script
compressing log with: /bin/gzip


[root@www ~]# lsattr /var/log/admin.log*
-----a------- /var/log/admin.log
------------- /var/log/admin.log.1.gz  <==有压缩过喔!


看到了吗?透过这个方式,我们可以创建起属於自己的 logrotate 配置文件, 很简便吧!尤其是要注意的, /etc/syslog.conf 与 /etc/logrotate.d/* 文件常常要搭配起来,例如刚刚我们提到的两个案例中所创建的 /var/log/admin.log 就是一个很好的例子~创建后,还要使用 logrotate 来轮替啊! ^_^

转自:http://vbird.dic.ksu.edu.tw/linux_basic/0570syslog_3.php
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    logrotate 日志切割 nginx

    Logrotate 是一个基于 CRON 运行的日志切割工具,它可以根据配置文件自动切割和压缩日志文件。下面是 Logrotate 的详细介绍和相关知识点: 1. Logrotate 的介绍 Logrotate 是一个基于 CRON 运行的日志切割工具,它...

    logrotate winform

    在Windows平台上,虽然没有直接与`logrotate`对应的原生工具,但可以通过自定义脚本或者使用第三方工具来实现类似的功能。例如,可以使用批处理脚本结合Windows的命令行工具(如`Robocopy`或`powershell`)来定期...

    install-pm2-logrotate.zip

    标题中的"install-pm2-logrotate.zip"表明这是一个关于安装PM2日志旋转模块的压缩包文件。PM2是Node.js应用的进程管理工具,它能够保持应用在后台运行,并在异常退出时自动重启,提高了服务的稳定性。而PM2-...

    日志管理工具 Logrotate

    Logrotate 的配置文件位于 /etc/logrotate.conf,这个文件包含了全局配置信息。用户可以在这个文件中配置日志文件的处理规则,例如日志文件的最大大小、备份的频次、压缩方式等。 Logrotate 的关键点包括: * /...

    嵌入式平台cron和logrotate配置

    6. **/etc/cron.minutely/logrotate文件配置**:这个文件是一个示例,展示了如何配置每分钟执行一次logrotate命令,用于日志文件的轮转。 #### 三、logrotate日志管理配置 ##### 3.1 logrotate简介 logrotate是一...

    Centos7配置logrotate执行Tomcat日志轮转

    CentOS 7中的`logrotate`工具是一个理想的解决方案,它能够自动地对日志文件进行轮转、压缩和清理,从而有效地管理和优化磁盘空间。下面我们将详细探讨如何配置`logrotate`来执行Tomcat的日志轮转。 首先,日志轮转...

    ansible-logrotate, Ansible星系角色设置logrotate和其他旋转脚本.zip

    ansible-logrotate, Ansible星系角色设置logrotate和其他旋转脚本 logrotate 安装 logrotate,通过指定指令列表来设置额外的logrotate脚本。要求无角色变量logrotate_scripts: rotation脚本的列表和用于旋转的指令。...

    logrotate配置

    logrotate 还可以用来备份日志文件,本篇将通过以下几部分来介绍日志文件的管理。 一、logrotate 配置 logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”...

    Linux 自带神器 logrotate 详解.doc

    logrotate 是 Linux 系统中的一款日志文件管理工具,用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用,可以节省磁盘空间。本文将对 logrotate 的配置文件、日志轮转操作、命令格式等进行...

    logrotate日志切割工具自动化脚本

    在Linux环境中,`logrotate`是一个非常实用的日志切割工具,用于自动化地管理和轮换日志文件,以避免单个日志文件过大导致磁盘空间耗尽或读取效率降低。本文将详细介绍`logrotate`的使用,包括其工作原理、配置文件...

    Linux使用logrotate来切割日志文件

    程序在运行的时候为了了解运行状态,会输出日志文件,时间久了日志文件会变得非常大,甚至达到GB级别。我在golang应用里使用logrus包来打日志,配置和使用都很方便,就是没有日志分割的功能,应用在线上运行一个月后...

    logrotate:logrotate实用程序旨在简化在生成大量日志文件的系统上对日志文件的管理

    logrotate实用程序旨在简化在生成大量日志文件的系统上对日志文件的管理。 Logrotate允许自动循环压缩,删除和邮寄日志文件。 可以将Logrotate设置为每小时,每天,每周,每月或当日志文件达到特定大小时处理日志...

    linux下logrotate配置和理解.pdf

    Linux下logrotate配置和理解 Logrotate是一个日志文件管理工具,广泛应用于Linux...logrotate是一个功能强大且灵活的日志文件管理工具,通过配置logrotate.conf文件和include选项可以实现日志文件的自动备份和管理。

    日志切割之Logrotate1

    安装后的主要配置文件位于`/etc/logrotate.conf`,而具体的日志配置文件则存放在`/etc/logrotate.d/`目录下。 **3、logrotate配置实践** 配置logrotate通常涉及以下几个步骤: - **创建日志文件**:例如,我们...

    pm2-logrotate的linux离线安装,新启

    pm2-logrotate的linux离线安装包。 安装说明详见:https://blog.csdn.net/diaya/article/details/123852658

    logrotate命令 管理记录文件

    使用logrotate指令,可以让你轻松管理系统所产生的记录文件。它提供自动替换,压缩,删除和邮寄记录文件,每个记录文件都可被设置成每日,每周或每月处理,也能在文件太大时立即处理。您必须自行编辑,指定配置文件...

    22_认识与分析登录档

    同时,通过定期轮替(logrotate)登录档,可以避免单个文件过大,防止因日志信息泄露带来的安全风险。 【登录档的轮替 (logrotate)】 `logrotate`工具负责定期重命名和压缩旧的登录文件,以保持日志管理的有效性和...

    linux下logrotate配置和理解借鉴.pdf

    Linux 下 Logrotate 配置和理解借鉴 Logrotate 是 Linux 系统中的一种日志文件管理工具,...Logrotate 是一种非常实用的日志文件管理工具,通过配置 logrotate.conf 文件,可以根据需要对日志文件进行管理和备份。

    前端开源库-logrotate-stream

    **前端开源库-logrotate-stream详解** 在前端开发中,日志管理是不可或缺的一部分,它能够帮助开发者追踪程序运行状态、定位错误以及优化性能。`logrotate-stream` 是一个专为前端设计的开源库,旨在解决日志数据的...

Global site tag (gtag.js) - Google Analytics