本文翻译自 Linux日志工具 Logrotate 3.8.6 版本
原文 Linux 终端输入
man logrotate
NAME
logrotate - 轮转、压缩和邮寄系统日志
SYNOPSIS
logrotate [-dv] [-f|--force] [-s|--state file] config_file ..
DESCRIPTION
logrotate 旨在简化生成大量日志文件的系统的管理。它允许自动轮换、压缩、删除和邮寄日志文件。每个日志文件可以按天、周、月或当其变得过大时进行处理。
通常,logrotate作为每日的 cron 任务运行。除非日志的轮换标准基于日志的大小并且logrotate每天运行多次,或者使用了 -f 或 --force 选项,否则logrotate不会在一天内多次修改同一个日志。
可以在命令行上指定任意数量的配置文件。后面的配置文件可以覆盖前面文件中给出的选项,因此logrotate配置文件的列出顺序很重要。通常,应该使用一个包含其他所需配置文件的单一配置文件。有关如何使用 include 指令来实现此目的的更多信息,请参见下文。
如果在命令行上指定了一个目录,则该目录中的每个文件都将用作配置文件。
如果没有给出命令行参数,logrotate将打印版本和版权信息,以及简短的用法摘要。
如果在轮换日志时发生任何错误,logrotate将以非零状态退出。
OPTIONS
-?, --help
打印帮助信息。
-d, --debug
开启调试模式,并隐含使用 `-v`。在调试模式下,不会对日志或logrotate状态文件进行任何更改。
-f, --force
告诉logrotate强制执行轮转操作,即使它认为这没有必要。有时在向logrotate配置文件添加新条目后或手动删除旧日志文件后,这样做很有用。因为这样可以创建新文件,并确保日志记录继续正常进行。
-m, --mail <command>
指定logrotate用于发送日志的命令。该命令应该接受两个参数:1)邮件的主题,2)收件人。然后,该命令必须从标准输入读取消息并将其发送给收件人。默认的邮件命令是 `/bin/mail -s`。
-s, --state <statefile>
告诉logrotate使用一个替代的状态文件。当你以不同的用户身份运行logrotate来处理各种日志文件集时,这非常有用。默认的状态文件是 `/var/lib/logrotate/logrotate.status`。
--usage
打印简短的使用说明。
+-v, --verbose
开启详细模式,在轮转过程中显示消息。"+"前缀可能是文档中的格式错误,应忽略。
CONFIGURATION FILE
logrotate 从命令行指定的配置文件中读取所有关于它应该处理的日志文件的信息。每个配置文件可以设置全局选项(局部定义会覆盖全局定义,后面的定义会覆盖前面的定义)并指定要轮换的日志文件。一个简单的配置文件如下所示:
# 示例 logrotate 配置文件
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
}
~/log/*.log {}
前几行设置了全局选项;在示例中,日志在轮换后被压缩。请注意,只要行的第一个非空白字符是 #,注释可以出现在配置文件中的任何位置。
配置文件的下一部分定义了如何处理 /var/log/messages 日志文件。该日志文件将在五次每周轮换后被删除。在日志文件被轮换后(但在旧版本的日志被压缩之前),将执行 /sbin/killall -HUP syslogd 命令。
接下来的部分定义了 /var/log/httpd/access.log 和 /var/log/httpd/error.log 的参数。每当它们的大小超过 100k 时,日志文件将被轮换,并且在经过 5 次轮换后,旧的日志文件将被邮寄(未压缩)到 www@my.org,而不是被删除。sharedscripts 意味着 postrotate 脚本只会运行一次(在旧日志被压缩后),而不是为每个轮换的日志运行一次。请注意,日志文件名可以用引号括起来(如果名称包含空格,则必须使用引号)。支持正常的 shell 引用规则,支持 ' 、 "和 \ 字符。
接下来的部分定义了 /var/log/news 中所有文件的参数。每个文件按月轮换。这被视为单个轮换指令,如果多个文件发生错误,日志文件将不会被压缩。
最后一部分使用波浪号扩展来轮换当前用户主目录中的日志文件。这仅在您的 glob 库支持波浪号扩展时可用。GNU glob 支持此功能。
请谨慎使用通配符。如果您指定 *,logrotate 将轮换所有文件,包括之前轮换过的文件。解决此问题的方法是使用 olddir 指令或更精确的通配符(例如 *.log)。
以下是可以在 logrotate 配置文件中包含的指令的更多信息:
-
compress
默认情况下,旧版本的日志文件使用 gzip(1) 进行压缩。另请参见 nocompress。 -
compresscmd
指定用于压缩日志文件的命令。默认为 gzip(1)。另请参见 compress。 -
uncompresscmd
指定用于解压缩日志文件的命令。默认为 gunzip(1)。 -
compressext
如果启用了压缩,则指定压缩日志文件的扩展名。默认遵循配置的压缩命令的扩展名。 -
compressoptions
可以传递命令行选项给压缩程序(如果使用)。对于 gzip(1),默认是 -6(偏向于高压缩率,牺牲速度)。如果您使用不同的压缩命令,可能需要更改 compressoptions 以匹配。 -
copy
复制日志文件,但不更改原始文件。此选项可用于创建当前日志文件的快照,或当某些其他实用程序需要截断或解析文件时。使用此选项时,create 选项将无效,因为旧日志文件将保留在原处。 -
copytruncate
在创建副本后将原始日志文件截断为零大小,而不是移动旧日志文件并可选地创建新文件。当某些程序无法被告知关闭其日志文件时,可以使用此选项,因此可能会继续写入(追加)到先前的日志文件中。请注意,在复制文件和截断文件之间有非常小的时间间隔,因此可能会丢失一些日志数据。使用此选项时,create 选项将无效,因为旧日志文件将保留在原处。 -
create mode owner group, create owner group
在轮换后立即(在运行 postrotate 脚本之前)创建日志文件(与刚刚轮换的日志文件同名)。
mode 以八进制指定日志文件的模式(与 chmod(2) 相同),
owner 指定将拥有日志文件的用户名,
group 指定日志文件所属的组。可以省略任何日志文件属性,在这种情况下,新文件将使用与原始日志文件相同的值。可以使用 nocreate 选项禁用此选项。 -
createolddir mode owner group
如果 olddir 指令指定的目录不存在,则创建该目录。
mode 以八进制指定 olddir 目录的模式(与 chmod(2) 相同),
owner 指定将拥有 olddir 目录的用户名,
group 指定 olddir 目录所属的组。可以使用 nocreateolddir 选项禁用此选项。 -
daily
日志文件每天轮换一次。 -
dateext
使用日期扩展名(如 YYYYMMDD)归档旧版本的日志文件,而不是简单地添加一个数字。可以使用 dateformat 和 dateyesterday 选项配置扩展名。 -
dateformat format_string
使用类似于 strftime(3) 函数的符号指定 dateext 的扩展名。仅允许 %Y、%m、%d、%H 和 %s 说明符。默认值为 -%Y%m%d,除了每小时轮换时,默认值为 -%Y%m%d%H。请注意,分隔日志名称和扩展名的字符也是 dateformat 字符串的一部分。系统时钟必须设置为 2001 年 9 月 9 日之后,%s 才能正常工作。请注意,此格式生成的时间戳必须按字典顺序可排序(即,首先是年份,然后是月份,然后是日期。例如,2001/12/01 是可以的,但 01/12/2001 不行,因为 01/11/2002 会排序较低,尽管它更晚)。这是因为在使用 rotate 选项时,logrotate 会排序所有轮换的文件名,以找出哪些日志文件较旧并应被删除。 -
dateyesterday
使用昨天的日期而不是今天的日期来创建 dateext 扩展名,以便轮换的日志文件的名称中的日期与其内部的时间戳相同。 -
delaycompress
将前一个日志文件的压缩推迟到下一个轮换周期。仅在与 compress 结合使用时有效。当某些程序无法被告知关闭其日志文件时,可以使用此选项,因此可能会继续写入前一个日志文件一段时间。 -
extension ext
带有 ext 扩展名的日志文件可以在轮换后保留该扩展名。如果使用压缩,压缩扩展名(通常为 .gz)将出现在 ext 之后。例如,如果您有一个名为 mylog.foo 的日志文件,并希望将其轮换为 mylog.1.foo.gz 而不是 mylog.foo.1.gz。 -
hourly
日志文件每小时轮换一次。请注意,通常 logrotate 配置为每天由 cron 运行。您必须更改此配置并每小时运行 logrotate,才能真正每小时轮换日志。 -
ifempty
即使日志文件为空,也轮换它,覆盖 notifempty 选项(ifempty 是默认值)。 -
include file_or_directory
将给定文件作为参数读取,就像它在 include 指令出现的位置内联包含一样。如果给定目录,则在继续处理包含文件之前,按字母顺序读取该目录中的大多数文件。忽略的文件包括非普通文件(如目录和命名管道)以及名称以 tabooext 指令指定的禁忌扩展名之一结尾的文件。 -
mail address
当日志轮换出存在时,将其邮寄到 address。如果不应由特定日志生成邮件,可以使用 nomail 指令。 -
mailfirst
使用 mail 命令时,邮寄刚刚轮换的文件,而不是即将过期的文件。 -
maillast
使用 mail 命令时,邮寄即将过期的文件,而不是刚刚轮换的文件(这是默认行为)。 -
maxage count
删除超过 天的轮换日志。仅在日志文件要轮换时检查年龄。如果配置了 maillast 和 mail,文件将被邮寄到配置的地址。 -
maxsize size
当日志文件增长超过 size 字节时,即使未达到额外指定的时间间隔(每天、每周、每月或每年),也会轮换日志文件。相关的 size 选项类似,但它与时间间隔选项互斥,并且它会导致日志文件在不考虑上次轮换时间的情况下被轮换。使用 maxsize 时,会同时考虑日志文件的大小和时间戳。 -
minsize size
当日志文件增长超过 size 字节时,但在额外指定的时间间隔(每天、每周、每月或每年)之前,不会轮换日志文件。相关的 size 选项类似,但它与时间间隔选项互斥,并且它会导致日志文件在不考虑上次轮换时间的情况下被轮换。使用 minsize 时,会同时考虑日志文件的大小和时间戳。 -
missingok
如果日志文件丢失,继续处理下一个文件而不发出错误消息。另请参见 nomissingok。 -
monthly
日志文件在 logrotate 每月第一次运行时轮换(通常是在每月的第一天)。 -
nocompress
不压缩旧版本的日志文件。另请参见 compress。 -
nocopy
不复制原始日志文件并保留在原处。(这会覆盖 copy 选项)。 -
nocopytruncate
在创建副本后不截断原始日志文件。(这会覆盖 copytruncate 选项)。 -
nocreate
不创建新日志文件。(这会覆盖 create 选项)。 -
nocreateolddir
当 olddir 目录不存在时,logrotate 不会创建它。 -
nodelaycompress
不将前一个日志文件的压缩推迟到下一个轮换周期。(这会覆盖 delaycompress 选项)。 -
nodateext
不使用日期扩展名归档旧版本的日志文件。(这会覆盖 dateext 选项)。 -
nomail
不将旧日志文件邮寄到任何地址。 -
nomissingok
如果日志文件不存在,则发出错误。这是默认行为。 -
noolddir
日志在它们通常所在的目录中轮换。(这会覆盖 olddir 选项)。 -
为每个轮换的日志文件运行 prerotate 和 postrotate 脚本(这是默认行为,并覆盖 sharedscripts 选项)。日志文件的绝对路径作为第一个参数传递给脚本。如果脚本退出时出错,则不会为受影响的日志执行其余操作。
-
noshred
删除旧日志文件时不使用 shred。另请参见 shred。 -
notifempty
如果日志文件为空,则不轮换它。(这会覆盖 ifempty 选项)。 -
olddir directory
日志被移动到 directory 进行轮换。目录必须与要轮换的日志文件位于同一物理设备上,除非使用 copy、copytruncate 或 renamecopy 选项。除非指定了绝对路径名,否则假定目录相对于保存日志文件的目录。使用此选项时,所有旧版本的日志最终都会进入 directory。此选项可能会被 noolddir 选项覆盖。 -
postrotate/endscript
在 postrotate 和 endscript 之间的行(两者必须单独出现在行上)在日志文件轮换后执行(使用 /bin/sh)。这些指令只能出现在日志文件定义中。通常,日志文件的绝对路径作为第一个参数传递给脚本。如果指定了 sharedscripts,则整个模式将传递给脚本。另请参见 prerotate。有关错误处理,请参见 sharedscripts 和 nosharedscripts。 -
prerotate/endscript
在 prerotate 和 endscript 之间的行(两者必须单独出现在行上)在日志文件轮换之前执行(使用 /bin/sh),并且仅在日志实际轮换时执行。这些指令只能出现在日志文件定义中。通常,日志文件的绝对路径作为第一个参数传递给脚本。如果指定了 sharedscripts,则整个模式将传递给脚本。另请参见 postrotate。有关错误处理,请参见 sharedscripts 和 nosharedscripts。 -
firstaction/endscript
在 firstaction 和 endscript 之间的行(两者必须单独出现在行上)在所有匹配通配符模式的日志文件轮换之前执行(使用 /bin/sh),在 prerotate 脚本运行之前,并且仅在至少一个日志实际轮换时执行。这些指令只能出现在日志文件定义中。整个模式作为第一个参数传递给脚本。如果脚本退出时出错,则不会进行进一步处理。另请参见 lastaction。 -
lastaction/endscript
在 lastaction 和 endscript 之间的行(两者必须单独出现在行上)在所有匹配通配符模式的日志文件轮换之后执行(使用 /bin/sh),在 postrotate 脚本运行之后,并且仅在至少一个日志轮换时执行。这些指令只能出现在日志文件定义中。整个模式作为第一个参数传递给脚本。如果脚本退出时出错,则仅显示错误消息(因为这是最后一个操作)。另请参见 firstaction。 -
preremove/endscript
在 preremove 和 endscript 之间的行(两者必须单独出现在行上)在删除日志文件之前执行(使用 /bin/sh)。logrotate 将传递即将删除的文件的名称。另请参见 firstaction。 -
rotate count
日志文件在删除或邮寄到 mail 指令中指定的地址之前轮换 count 次。如果 count 为 0,则删除旧版本而不是轮换。 -
size size
仅当日志文件增长超过 size 字节时才轮换。如果 size 后跟 k,则假定大小为千字节。如果使用 M,则大小为兆字节,如果使用 G,则大小为千兆字节。因此,size 100、size 100k、size 100M 和 size 100G 都是有效的。 -
通常,prerotate 和 postrotate 脚本为每个轮换的日志运行,并且日志文件的绝对路径作为第一个参数传递给脚本。这意味着单个脚本可能会为匹配多个文件的日志文件条目(例如 /var/log/news/* 示例)运行多次。如果指定了 sharedscripts,则脚本只运行一次,无论有多少日志匹配通配符模式,并且整个模式将传递给它们。但是,如果模式中的日志都不需要轮换,则脚本将不会运行。如果脚本退出时出错,则不会为任何日志执行其余操作。此选项覆盖 nosharedscripts 选项并隐含 create 选项。
-
shred
使用shred -u删除日志文件,而不是 unlink()。这应确保日志在计划删除后不可读;默认情况下关闭此功能。另请参见 noshred 。 -
shredcycles count
要求 GNU shred(1) 在删除之前覆盖日志文件 count 次。如果没有此选项,将使用shred的默认值。 -
start count
这是用作轮换基础的编号。例如,如果指定0,则日志将在从原始日志文件轮换时创建为.0扩展名。如果指定9,则日志文件将创建为.9,跳过 0-8。文件仍将按照 rotate 指令指定的次数轮换。 -
su user group
使用此用户和组轮换日志文件,而不是使用默认用户/组(通常为 root)。user 指定用于轮换的用户名,group 指定用于轮换的组。如果此处指定的用户/组没有足够的权限在create指令中创建具有指定所有权的文件,则会导致错误。 -
tabooext [+] list
更改当前的禁忌扩展名列表(有关禁忌扩展名的信息,请参见 include 指令)。如果 + 在扩展名列表之前,则当前禁忌扩展名列表将增加,否则将被替换。启动时,禁忌扩展名列表包含.rpmsave、.rpmorig、~、.disabled、.dpkg-old、.dpkg-dist、.dpkg-new、.cfsaved、.ucf-old、.ucf-dist、.ucf-new、.rpmnew、.swp、.cfsaved、.rhn-cfg-tmp-*。 -
weekly [weekday]
日志文件在每个工作日轮换一次,或者如果自上次轮换以来日期至少提前了 7 天(忽略确切时间)。weekday 解释如下:0表示星期日,1表示星期一,…,6表示星期六;特殊值7表示每 7 天轮换一次,不考虑工作日。如果省略 weekday 参数,则默认为0。 -
yearly
如果当前年份与上次轮换的年份不同,则轮换日志文件。
FILES
- /var/lib/logrotate/logrotate.status
默认状态文件。 - /etc/logrotate.conf
配置选项。
SEE ALSO
AUTHORS
-
Erik Troan, Preston Brown, Jan Kaluza.
-
https://github.com/logrotate/logrotate
由 mr-mihu 翻译自2025年1月21日
1720

被折叠的 条评论
为什么被折叠?



