如何在Linux中使用Logrotate管理日志文件
今天,在本教程中,我们将了解如何在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