如何在Linux中使用Logrotate管理日志文件

时间:2020-03-21 11:46:15  来源:igfitidea点击:

今天,在本教程中,我们将了解如何在Linux上使用Logrotate管理日志文件。
该实用程序简化了日志文件的管理,对于每天产生大量日志文件的系统特别有用。
顾名思义,LogRotate会定期间隔将日志完全从系统中移出。
它还允许自动循环,压缩,删除和邮寄日志文件。
每个日志文件都可以每天,每周,每月或者当它变得太大时进行处理。

使用Logrotate管理日志文件

安装Logrotate

大多数Linux发行版的默认存储库中都有Logrotate。

在Arch Linux及其衍生产品上,我们需要运行以下命令进行安装。

$sudo pacman -S logrotate

在基于RPM的系统(例如RHEL,CentOS,Scientific Linux)上,可以使用以下命令进行安装:

$sudo yum install logrotate

在Debian,Ubuntu上:

$sudo apt-get install logrotate

在SUSE上,openSUSE:

$sudo znf install logrotate

配置Logrotate

LogRotate的主要配置文件是/etc/logrotate.conf。

这是我的Arch系统中此文件的默认内容。
在其他Linux发行版上,此文件输出可能看起来有些不同。

$cat /etc/logrotate.conf

输出示例:

# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# restrict maximum size of log files
#size 20M
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# Logs are moved into directory for rotation
# olddir /var/log/archive
# Ignore pacman saved files
tabooext + .pacorig .pacnew .pacsave
# Arch packages drop log rotation information into this directory
include /etc/logrotate.d
/var/log/wtmp {
 monthly
 create 0664 root utmp
 minsize 1M
 rotate 1
}
/var/log/btmp {
 missingok
 monthly
 create 0600 root utmp
 rotate 1
}

让我们看看上面的配置文件中每个选项的作用。

  • 每周-每周轮换一次日志。
  • 旋转4-默认情况下,LogRotate保留价值四个星期(显然一个月)的日志文件。由于它会在特定时间段后轮换所有日志文件,因此,如果我们不想丢失重要的日志文件,则可能需要对其进行备份。
  • 大小为20M-如果日志文件大小达到20MB,则旋转日志文件。默认情况下,此选项处于禁用状态。要启用它,只需取消注释即可。
  • create-旋转旧日志文件后,一次创建新的日志文件。默认情况下启用此选项。
  • compress-压缩日志文件。另外,默认情况下它不会压缩日志。如果要压缩日志,请取消注释此行。
  • /etc/logrotate.d/-此目录包含特定于应用程序的日志规则文件。
  • 确定-如果缺少日志文件,Logrotate将继续执行下一个而不发出错误消息。

Logrotate分割日志文件,并根据/etc/logrotate.d/目录下指定的规则压缩日志。

让我们看一下该目录的内容。

$ls /etc/logrotate.d/

输出示例为:

lirc  samba

如我们在上面的输出中看到的,它包含由LogRotate管理的所有日志的各种规则文件。
要查看特定的应用程序日志规则,例如samba,请运行:

$cat /etc/logrotate.d/samba

输出示例:

/var/log/samba/log.smbd /var/log/samba/log.nmbd /var/log/samba/*.log {
 notifempty
 missingok
 sharedscripts
 copytruncate
 postrotate
 /bin/kill -HUP `cat /var/run/samba/*.pid 2>/dev/null` 2>/dev/null || true
 endscript
}

其中

  • notifempty-表示如果日志文件为空,则不会循环。
  • copytruncate-创建副本后,在原处截断原始日志文件。
  • postrotate/endscript-旋转日志文件后执行postrotate和endscript之间的行。
  • sharedscript-无论有多少条日志与通配符模式匹配,脚本仅运行一次。

我们还可以在/etc/logrotate.d/目录中创建自己的日志规则文件,并定义自己的规则。

Cron每天运行logroate实用程序以搜索要旋转的日志文件。
我们可以在/etc/cron.daily/logrotate文件中指定自动日志轮换规则,以避免用户手动干预。
它将每天在特定时间执行日志轮换。

要验证日志文件是否正在旋转,请运行:

$cat /var/lib/logrotate.status

输出示例:

logrotate state -- version 2
"/var/log/samba/log.smbd" 2015-5-12-11:0:0
"/var/log/lircd" 2015-6-15-10:0:0
"/var/log/httpd/*log" 2015-5-12-11:0:0
"/var/log/wtmp" 2015-5-6-10:0:0
"/var/log/samba/*.log" 2015-5-12-11:0:0
"/var/log/btmp" 2016-4-1-11:36:53
"/var/log/samba/log.nmbd" 2015-5-12-11:0:0

有关更多详细信息,请输入以下命令来运行logrotate:

$logrotate --help

或者,

$man logrotate