简介
logrotate旨在简化生成大量日志文件的系统的管理。它允许自动轮换、压缩、删除和邮寄日志文件。每个日志文件可以每天、每周、每月或当它变得太大时处理。
安装
以centos7或ubuntu20.04为例,系统默认已经安装好logrotate,未安装的情况下,也可以通过以下命令安装logrotate
# centos
# 安装命令
sudo yum install logrotate
# ubuntu
# 安装命令
sudo apt install logrotate
# 版本确认
logrotate --version
命令
[root@192 ~]# logrotate -?
用法: logrotate [OPTION...] <configfile>
-d, --debug Don't do anything, just test (implies -v)
-f, --force Force file rotation
-m, --mail=command Command to send mail (instead of `/bin/mail')
-s, --state=statefile Path of state file
-v, --verbose Display messages during rotation
-l, --log=STRING Log file
--version Display version information
Help options:
-?, --help Show this help message
--usage Display brief usage message
配置
默认情况下,logrotate依赖cron每天定期执行,默认配置文件:/etc/logrotate.conf,可以在/etc/logrotate.d/目录下自定义配置文件
配置示例:
# sample logrotate configuration file
compress
/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail www@my.org
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
/var/log/news/* {
monthly
rotate 2
olddir /var/log/news/old
missingok
postrotate
kill -HUP 'cat /var/run/inn.pid'
endscript
nocompress
}
参数说明:
compress:旧版本的日志文件默认使用gzip进行压缩
compresscmd:指定使用哪个命令来压缩日志文件。默认为gzip。
uncompresscmd:指定使用哪个命令来解压缩日志文件。默认是gunzip。
compressext:指定在压缩日志文件上使用哪个扩展名(如果启用了压缩)。默认值遵循配置的压缩命令。
compressoptions:命令行选项可以传递给压缩程序(如果正在使用)。gzip的默认值为“-9”(最大压缩)
copy:复制日志文件,但不要更改原始文件。使用此选项时,create选项将不起作用
copytruncate:创建副本后就地截断原始日志文件,而不是移动旧日志文件并选择创建新日志文件。当某些程序无法被告知关闭其日志文件并因此可能继续永远写入(追加)到前一个日志文件时,可以使用它。请注意,复制文件和截断文件之间的时间片非常短,因此可能会丢失一些日志记录数据。使用此选项时,create选项将不起作用,因为旧日志文件保留在原处。
create:轮换后(运行postrotate脚本之前),将立即创建日志文件(与刚刚轮换的日志文件同名)。
daily:日志文件每天都轮换。
dateext:归档旧版本的日志文件,添加每日扩展名(例如 YYYYMMDD),而不是简单地添加数字。可以使用dateformat选项配置扩展 。
dateformat format_string:使用类似于strftime函数的表示法指定dateext的扩展名。仅允许使用 %Y %m %d 和 %s 说明符。默认值为-%Y%m%d。
delaycompress:将前一个日志文件的压缩推迟到下一个循环周期。这仅在与compress结合使用时才有效。
extension ext:扩展名为ext 的日志文件可以在轮换后保留。如果使用压缩,则压缩扩展名(通常为.gz)出现在 ext之后。
ifempty:即使日志文件为空,也会轮换日志文件,覆盖notifempty选项(ifempty是默认值)。
include file_or_directory:读取作为参数给出的文件,就好像它是内嵌包含在包含指令出现的地方。如果给定了目录,则在继续处理包含文件之前,将按字母顺序读取该目录中的大多数文件。
mail address:轮换超过期限的文件会被邮寄到指定地址。如果特定日志不应生成邮件,则可以使用 nomail指令。
mailfirst:使用mail命令时,邮寄刚刚轮换的文件,而不是即将过期的文件。
maillast:使用mail命令时,邮寄即将过期的文件,而不是刚刚轮换的文件(这是默认设置)。
maxage count:删除早于 <count> 天的轮换日志。仅当要轮换日志文件时才会检查。如果配置了maillast和mail,则文件将邮寄到配置的地址。
minsize size:当日志文件增长到大于size字节时,日志文件将进行轮换,但不会在额外指定的时间间隔(daily, weekly, monthly, or yearly)之前进行轮换。
missingok:如果日志文件丢失,继续执行下一个日志文件而不发出错误消息。
monthly:日志文件在一个月内第一次运行 logrotate时轮换(通常是在该月的第一天)。
nocompress:旧版本的日志文件不压缩。
nocopy:不要复制原始日志文件并将其保留在原处。(这会覆盖copy选项)
nocopytruncate:创建副本后不要就地截断原始日志文件(这会覆盖copytruncate选项)。
nocreate:不会创建新的日志文件(这会覆盖create选项)。
nodelaycompress:不要将前一个日志文件的压缩推迟到下一个循环周期(这会覆盖delaycompress选项)。
nodateext:不要归档带有日期扩展名的旧版本日志文件(这会覆盖dateext选项)。
nomail:不要将旧日志文件邮寄到任何地址。
nomissingok:如果日志文件不存在,则发出错误。这是默认设置。
noolddir:日志在日志通常所在的同一目录中轮换(这会覆盖olddir选项)。
nosharedscripts:为每个轮换的日志文件运行prerotate和postrotate脚本(这是默认设置,并覆盖sharedscripts选项)。日志文件的绝对路径作为第一个参数传递给脚本。如果脚本因错误退出,则仅对受影响的日志执行其余操作。
noshred:删除旧日志文件时不要使用shred。
notifempty:如果日志为空,则不要旋转日志(这会覆盖ifempty选项)。
olddir directory:日志被移动到directory中进行轮换。该directory必须与正在轮换的日志文件位于同一物理设备上,并且除非指定绝对路径名,否则假定该目录相对于保存日志文件的目录。使用此选项时,所有旧版本的日志最终都会出现在 directory中。此选项可能会被noolddir选项覆盖。
postrotate/endscript:postrotate和endscript之间的行(两者都必须单独出现在行上)在日志文件轮换后执行(使用/bin/sh )。这些指令只能出现在日志文件定义中。通常,日志文件的绝对路径作为第一个参数传递给脚本。如果指定了sharedscripts,则整个模式将传递给脚本。
prerotate/endscript:prerotate和endscript之间的行(两者都必须单独出现在行中)在日志文件轮换之前执行(使用/bin/sh ),并且仅当日志实际轮换时才执行。这些指令只能出现在日志文件定义中。通常,日志文件的绝对路径作为第一个参数传递给脚本。如果指定了sharedscripts,则整个模式将传递给脚本。
firstaction/endscript:在匹配通配符模式的所有日志文件之前,在运行私有脚本之前,并且只有在至少有一个日志实际要旋转之前,才会执行(使用/bin/sh) firstaction和endscript之间的行(两者都必须单独出现在行中)。这些指令只能出现在日志文件定义中。整个模式作为第一个参数传递给脚本。如果脚本退出并出现错误,则不会进行进一步处理。参见lastaction。
lastaction/endscript:在所有匹配通配符模式的日志文件被旋转之后,在postrotate脚本运行之后,并且只有在至少一个日志被旋转之后,才会执行lastaction和endscript之间的行(它们都必须单独出现在行中)(使用/bin/sh)一次。这些指令只能出现在日志文件定义中。整个模式作为第一个参数传递给脚本。如果脚本退出时出现错误,则只显示一条错误消息(因为这是最后一个操作)。参见firstaction。
rotate count:日志文件在被删除或邮寄到邮件指令中指定的地址之前会轮换count次。如果count为 0,则旧版本将被删除而不是轮换。
size size:仅当日志文件大于size字节时,才会轮换日志文件。如果size后跟k,则假定大小以千字节为单位。如果使用M,则大小以兆字节为单位;如果使用G ,则大小以千兆字节为单位。所以size 100、size 100k、size 100M和 size 100G 都是有效的。
sharedscripts:通常,为每个轮换的日志运行prerotate和postrotate脚本,并将日志文件的绝对路径作为第一个参数传递给脚本。这意味着单个脚本可能会针对与多个文件匹配的日志文件条目运行多次(例如 /var/log/news/*示例)。如果指定了sharedscripts,则无论有多少日志与通配符模式匹配,脚本都仅运行一次,并且整个模式都会传递给它们。但是,如果模式中没有任何日志需要轮换,则脚本根本不会运行。如果脚本因错误退出,则不会对任何日志执行其余操作。此选项覆盖nosharedscripts选项并意味着create选项。
shred:使用shred -u 而不是 unlink()删除日志文件。这应确保日志在计划删除后不可读;默认情况下此功能处于关闭状态。另请参见noshred。
shredcycles count:要求 GNU shred在删除之前覆盖日志文件count次。如果没有此选项,将使用shred的默认值。
start count:这是用作旋转基数的数字。例如,如果指定 0,则在从原始日志文件轮换日志时,将使用 .0 扩展名创建日志。如果指定 9,则将使用 .9 创建日志文件,跳过 0-8。文件仍将旋转count指令指定的次数 。
tabooext [+] list:当前的禁忌扩展列表已更改(有关禁忌扩展的信息,请参阅include指令)。如果扩展名列表前面有 +,则当前禁忌扩展名列表将被扩充,否则将被替换。启动时,禁忌扩展名列表包含 .rpmorig、.rpmsave、,v、.swp、.rpmnew、~、.cfsaved 和 .rhn-cfg-tmp-*。
weekly:如果当前工作日小于上次轮换的工作日或者自上次轮换以来已过去一周以上,则轮换日志文件。这通常与在一周的第一天轮换日志相同,但如果不是每晚都运行 logrotate ,效果会更好。
yearly:如果当前年份与上次轮换年份不同,则日志文件会轮换。