如何手动轮换Linux上的日志文件

译文
系统 Linux
日志轮换(log rotation)是Linux系统上的常见操作,可以防止任何特定的日志文件变得太大,又确保系统活动方面仍有足够的详细信息,用于必要的系统监测和故障排除。

[[319652]]

【51CTO.com快译】日志轮换(log rotation)是Linux系统上的常见操作,可以防止任何特定的日志文件变得太大,又确保系统活动方面仍有足够的详细信息,用于必要的系统监测和故障排除。

一组日志文件中最旧的日志文件删除后,剩余的日志文件降一格,较新的文件取而代之,成为当前日志文件。这个过程很容易实现自动化,可以根据需要调整详细信息。

你可以通过使用logrotate命令手动轮换日志文件。本文详细介绍了如何手动轮换日志文件和预期看到的内容。

本文中描述的示例适用于Ubuntu和相关的Linux系统。其他系统可能使用不同的日志文件和配置文件名,但是过程本身应大同小异。

为什么轮换日志文件?

在正常情况下,无需手动轮换日志文件。你的Linux系统应该已经被设置为每天(或更久)轮换一些日志,根据日志大小轮换其他日志。如果你需要轮换日志文件以释放空间,或将当前日志与进行中的活动分开来,这很容易做到,但取决于你的文件轮换规格。

介绍一点背景

一旦安装了Linux系统,许多日志文件被设置以便轮换。此外,某些应用程序安装到系统上后会添加自己的日志文件和轮换规格。日志文件轮换的配置文件可以在/etc/logrotate.d目录中找到。

在日志轮换过程中,当前日志通常获得log.1之类的名称,旧log.1变成了log.2,依此类推,而最旧的日志文件(比如log.7)从系统中删除。当然,所保留版本的名称和数量取决于轮换的日志以及/etc/logrotate.d目录中那些文件的轮换规格。对于一些日志文件,只保留了几“代”,而对于另一些日志文件,可能会看到七代甚至更多代。

在通常的日志文件轮换之后,syslog文件可能如下所示。(注意:行尾添加了“was syslog”注释,以说明轮换过程如何影响了文件。) 

  1. $ ls -l /var/log/syslog*  
  2. -rw-r----- 1 syslog adm 128674 Mar 10 08:00 /var/log/syslog <== new  
  3. -rw-r----- 1 syslog adm 2405968 Mar 9 16:09 /var/log/syslog.1 <== was syslog  
  4. -rw-r----- 1 syslog adm 206451 Mar 9 00:00 /var/log/syslog.2.gz <== was syslog.1  
  5. -rw-r----- 1 syslog adm 216852 Mar 8 00:00 /var/log/syslog.3.gz <== was syslog.2.gz  
  6. -rw-r----- 1 syslog adm 212889 Mar 7 00:00 /var/log/syslog.4.gz <== was syslog.3.gz  
  7. -rw-r----- 1 syslog adm 219106 Mar 6 00:00 /var/log/syslog.5.gz <== was syslog.4.gz  
  8. -rw-r----- 1 syslog adm 218596 Mar 5 00:00 /var/log/syslog.6.gz <== was syslog.5.gz  
  9. -rw-r----- 1 syslog adm 211074 Mar 4 00:00 /var/log/syslog.7.gz <== was syslog.6.gz 

除了该系统上当前和最新的日志文件外,所有其他日志文件已压缩以节省空间,这不足为奇。大多数系统管理员可能只会查看最新的文件,因此保持其他文件可用但已压缩是明智之举。

手动轮换日志

想手动轮换syslog文件,就要使用logrotate命令,如下所示:

  1. $ sudo logrotate -f /etc/logrotate.d/rsyslog 

请注意,该logrotate命令使用-f(强行轮换)选项。轮换配置详细信息从/etc/logrotate.d/rsyslog目录中的指定文件中提取。然后,该命令将遵循典型的过程——删除syslog.7.gz,将syslog.6.gz移至syslog.7.gz,将syslog.5.gz移至syslog.6.gz,将syslog.4.gz移至syslog .5.gz,将syslog.3.gz移至syslog.4.gz,然后将syslog.2.gz移至syslog.1.gz,但不一定会创建新的syslog文件。你可以使用诸如此类的命令手动执行此操作,以设置文件并确保适当的文件所有权和权限:

  1. $ sudo touch /var/log/syslog  
  2. $ sudo chown syslog:adm /var/log/syslog  
  3. $ sudo chmod 640 /var/log/syslog 

另外,你可以将这一行添加到etc/logrotate.d/rsyslog文件为你做这项工作:

  1. create 0640 syslog adm 

插入以下所示的内容:

  1. /var/log/syslog  
  2.  
  3. rotate 7  
  4. daily  
  5. missingok  
  6. notifempty  
  7. create 0640 syslog adm <==  
  8. delaycompress  
  9. compress  
  10. postrotate  
  11. /usr/lib/rsyslog/rsyslog-rotate  
  12. endscript  

这是对记录用户登录的wtmp日志文件执行手动日志轮换的例子。注意:由于/etc/logrotate.d/wtmp中的“rotate 2”规格,该系统上只保留了两个wtmp文件。

之前:

  1. $ ls -l wtmp*  
  2. -rw-r----- 1 root utmp 1152 Mar 12 11:49 wtmp  
  3. -rw-r----- 1 root utmp 768 Mar 11 17:04 wtmp.1 

命令:

  1. $ sudo logrotate -f /etc/logrotate.d/wtmp 

之后:

  1. $ ls -l /var/log/wtmp*  
  2. -rw-r----- 1 root utmp 0 Mar 12 11:52 /var/log/wtmp  
  3. -rw-r----- 1 root utmp 1152 Mar 12 11:49 /var/log/wtmp.1  
  4. -rw-r----- 1 root adm 99726 Feb 21 07:46 /var/log/wtmp.report 

注意:每个日志的最新轮换被记录在logrotate的状态文件中——无论轮换是手工执行还是自动执行:

  1. $ grep wtmp /var/lib/logrotate/status  
  2. "/var/log/wtmp" 2020-3-12-11:52:57 

原文标题:Manually rotating log files on Linux,作者:Sandra Henry-Stocker

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2020-02-11 12:54:34

Linux日志文件消息

2018-01-31 12:40:48

Linux命令文件搜索

2019-04-25 13:30:14

Linux文件分身

2010-06-10 16:00:23

MySQL 5

2019-10-21 08:56:36

Linux日志文件拆分

2021-06-16 06:31:55

Linkerd 2.1Step by SteWebhook TLS

2020-03-26 12:47:14

Linux日志滚动

2019-10-11 08:00:00

Linux命令最大文件

2010-04-14 17:11:13

Oracle管理

2019-06-10 08:15:52

Linux命令

2021-08-30 13:08:54

Linux实时监控日志文件

2023-02-10 09:40:26

systemd日志

2023-12-20 22:04:17

Linux二进制文件

2020-12-28 06:44:45

FedoraLinux RPM文件

2010-03-09 17:57:46

2014-12-15 09:59:28

LinuxApache

2015-03-30 11:34:19

LinuxFSlint

2015-08-03 15:48:22

Linux日志

2019-02-25 15:36:52

Linux复制文件远程系统

2011-01-18 11:15:19

LinuxLOG
点赞
收藏

51CTO技术栈公众号