学习如何在Linux中使用Logrotate管理各种日志


Logrotate 旨在管理生成大量日志记录的 Ubuntu 系统。它允许自动轮换、压缩、删除和邮寄日志记录。每个日志文件可以每天、每周、每月或在它增长时处理。本文解释了“学习如何在Linux中使用logrotate管理各种日志”

要安装 logrotate,请使用以下命令:

$ sudo apt-get install logrotate

示例输出应如下所示:

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
libecap3 squid-common squid-langpack
Use 'sudo apt autoremove' to remove them.
The following NEW packages will be installed:
logrotate
0 upgraded, 1 newly installed, 0 to remove and 250 not upgraded.
Need to get 37.6 kB of archives.
After this operation, 116 kB of additional disk space will be used.
Get:1 http://in.archive.ubuntu.com/ubuntu xenial/main amd64 logrotate amd64 3.8.7-2ubuntu2 [37.6 kB]
Fetched 37.6 kB in 0s (86.9 kB/s)
Selecting previously unselected package logrotate.
(Reading database ... 239112 files and directories currently installed.)
Preparing to unpack .../logrotate_3.8.7-2ubuntu2_amd64.deb ...
Unpacking logrotate (3.8.7-2ubuntu2) ...
Processing triggers for man-db (2.7.5-1) ...
.................................................................................

要获取有关 logrotate 的更多选项,请使用以下命令:

$ logrotate --help

示例输出应如下所示:

Usage: logrotate [OPTION...]
-d, --debug             Don't do anything, just test (implies -v)
-f, --force             Force file rotation
-m, --mail=command      Command to send mail (instead of `/usr/bin/mail')
-s, --state=statefile   Path of state file
-v, --verbose           Display messages during rotation
--version               Display version information

Help options:
-?, --help             Show this help message
--usage                Display brief usage message

logrotate 的用法应如下所示:

Usage: logrotate [-dfv?] [-d|--debug] [-f|--force] [-m|--mail=command]
[-s|--state=statefile] [-v|--verbose] [--version] [-?|--help]
[--usage] [OPTION...] <configfile>

示例

要获取有关 logrotate 文件的信息,请使用以下命令:

$ cd /etc/logrotate.d/
/etc/logrotate.d$ ls

示例输出应如下所示:

apache2          dbconfig-common          munin-node          speech-dispatcher          upstart
apport           dpkg                     mysql-server        squid                      yum  
apt              jenkins                  pm-utils            squidguard
cacti            lightdm                  ppp                 ufw
cups-daemon munin rsyslog unattended-upgrades

要获取 jenkins 的配置,请使用以下命令:

$ sudo nano /etc/logrotate.d/jenkins

示例输出应如下所示:

/var/log/jenkins/jenkins.log {
   weekly
   copytruncate
   missingok
   rotate 52
   compress
   delaycompress
   notifempty
   size 10k
   dateext
   maxage 10
   compresscmd /bin/bzip2
}

如何在 Ubuntu 上安装 Jenkins

上述结果的总结如下:

weekly – 如果当前星期几小于上次轮换的星期几,或者自上次轮换以来已经过去了一个多星期,则日志记录将被轮换。

copytruncate – 在创建副本后,就地截断旧日志文件,而不是移动旧日志文件并可选地创建一个新文件。

rotate 52 – 在删除或邮寄到邮件指令中指定的地址之前,日志记录将轮换 52 次。

compress – 默认情况下,旧版本的日志记录使用 gzip 压缩。

delaycompress – 它将先前日志文件的压缩延迟到下一个轮换周期。

notifempty – 如果日志为空,则不进行轮换。

size 10k – 如果文件大小等于(或大于)10K,则运行 logrotate。

dateext – 它通过添加日期扩展名(例如 YYYYMMDD)来存档旧版本的日志文件,而不是简单地添加数字。

maxage 10 – 删除超过 10 天的已轮换日志。

compresscmd – 它指定用于压缩日志文件的命令。

Cron 作业

要获取 logrotate 的每日 cron 作业,请使用以下命令:

$ cat /etc/cron.daily/logrotate

示例输出应如下所示:

#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
[ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

要获取 logrotate 的状态,请使用以下命令:

$ cat /var/lib/logrotate/status

示例输出应如下所示:

logrotate state -- version 2
"/var/log/syslog" 2017-1-23-9:14:34
"/var/log/cacti/cacti.log" 2017-1-23-9:14:34
"/var/log/mail.log" 2017-1-23-9:14:34
"/var/log/kern.log" 2017-1-23-9:14:34
"/var/log/cups/error_log" 2016-12-17-14:5:58
"/var/log/mysql.log" 2017-1-23-9:0:0
"/var/log/ufw.log" 2017-1-23-9:0:0
"/var/log/cacti/rrd.log" 2017-1-9-11:0:0
"/var/log/lightdm/seat0-greeter.log" 2017-1-23-9:14:34
"/var/log/cacti/poller-error.log" 2017-1-9-11:0:0
"/var/log/munin/munin-update.log" 2017-1-17-9:58:3
"/var/log/speech-dispatcher/speech-dispatcher.log" 2017-1-23-9:0:0
"/var/log/debug" 2017-1-23-9:0:0
"/var/log/yum.log" 2017-1-17-9:0:0
"/var/log/munin/munin-node.log" 2017-1-23-9:14:34
........................................................................

在本文中,我们学习了如何在 Linux 中使用 logrotate 管理各种日志。在我们的下一篇文章中,我们将提供更多基于 Linux 的技巧和提示。敬请关注。

更新于:2020年1月21日

浏览量:117

开启你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.