LOGROTATE(8)

NAME
logrotate - 轮换，压缩以及邮寄系统日志

SYNOPSIS 总览
logrotate [-dv] [-f|--force] [-s|--state file] config_file+

DESCRIPTION 描述
logrotate 被设计用来简化产生大量日志文件的系统的管理。它允许自动地轮换，压缩，删除和邮寄日志文件。每个日志文件可以按天处理，或者按周，月或在任何它变得太大的时候处理。

通常，logrotate 作为每日的 cron 任务来运行。它不会在一天之内多次修改一个日志文件，除非标准是日志的大小，并且它一天被运行多次，或者至少使用了 -f 或 -force 选项。

可以在命令行指定任意个数的配置文件。靠后的配置文件可以覆盖前面的文件中的选项，因此以何种顺序列出 logrotate 配置文件是很重要的。通常，应当指定单一的配置文件，内容可以是所有其他的配置文件。参见下面有关如何使用 include 指令来完成这些的信息。如果在命令行给出一个目录，目录中的每个文件都将用作配置文件。

如果没有给出命令行参数，logrotate 将输出版本和版权信息，以及简要的使用说明。如果在轮换日志时发生任何错误，logrotate 将以非零值退出。

OPTIONS 选项

-d  打开调试模式，蕴含了 -v。在调试模式中，不会对日志或 logrotate 状态文件作出修改。

-f, --force
    使得 logrotate 强制轮换，即使它认为不必要。有时这在向 logrotate 中添加项目后很有用，或者如果旧日志文件被手动删除，那么新文件将被创建，使得日志可以正常进行。

-m, --mail <command>
    告诉 logrotate 使用哪个命令来邮寄日志。命令应当接受两个参数：1) 邮件主题，2) 收件人。命令必须从标准输入读取消息，然后将它发送给收件人。默认邮寄命令是 /bin/mail -s 。

-s, --state <statefile>
    使得 logrotate 使用另一个状态文件。在以另一个用户运行 logrotate，管理不同的日志文件集合时很有用。默认状态文件是 /var/lib/logrotate/status 。

--usage
    输出短的用法信息。

CONFIGURATION FILE 配置文件
logrotate 读取命令行中指定的所有配置文件中，有关它必须处理的日志文件的任何内容。每个配置文件可以设置全局选项 (局部选项超越全局的，新的替代旧的)，指定一个日志文件来轮换。简单的配置文件看上去是这样：
# sample logrotate configuration file
compress
/var/log/messages {
    rotate 5
    weekly
    postrotate
	/sbin/killall -HUP syslogd
    endscript
}
"/var/log/httpd/access.log" /var/log/httpd/error.log {
    rotate 5
    mail www@my.org
    size=100k
    sharedscripts
    postrotate
	/sbin/killall -HUP httpd
    endscript
}
/var/log/news/news.crit {
    monthly
    rotate 2
    olddir /var/log/news/old
    missingok
    postrotate
	kill -HUP `cat /var/run/inn.pid`
    endscript
    nocompress
}
开头的几行定义了全局选项；这个例子中，日志在轮换后被压缩。注意注释可以在配置文件中任何地方出现，只要一行的第一个非空白字符是 # 就被当作注释。 例子配置文件的下一节定义了如何处理日志文件 /var/log/messages 。日志在经过五次按周轮换后将被删除。在日志文件被轮换后 (但在旧日志被压缩前)，将执行 /sbin/killall -HUP syslogd 命令。 下一节定义了 /var/log/httpd/access.log 和 /var/log/httpd/error.log 的参数。它们在大小超过 100k 后被轮换，在五次轮换后，旧的日志文件被邮寄 (未压缩) 到 www@my.org，而不是马上被删除。sharedscripts 意思是 postrotate 脚本只运行一次，而不是为每个轮换的日志各运行一次。注意在开头，第一个文件名周围的双引号，这样做允许日志名中包含空格。接受通常的 shell 引用规则，支持 '，" 和 \ 字符。 最后一节定义了 /var/log/news 中所有文件的参数。每个文件被按月轮换。可以认为它是单个轮换指令，如果超过一个文件出错，日志文件将不会压缩。 请小心使用通配符。如果指定 *，logrotate 将轮换所有文件，包括已经轮换的那些。绕过这一限制的做法是使用 olddir 指令，或者给出更精确的通配符 (例如 *.log) 。 这里有 logrotate 配置文件中可以包含的指令的详细信息。

compress
    旧版本的日志文件被以 gzip 压缩。参见 nocompress 。

compresscmd
    指定使用哪个命令来压缩日志文件。默认是 gzip。参见 compress 。

uncompresscmd
    指定使用哪个命令来解压日志文件。默认是 gunzip 。

compressext
    指定压缩的日志文件的扩展名，如果使用压缩的话。默认由压缩程序决定。

compressoptions
    传递给压缩程序的命令行选项，如果使用压缩的话。默认对于 gzip 是 "-9" (最大压缩) 。

copy
    制作日志文件的备份，但是不改变原有的。这个选项可以用来，例如，制作当前日志文件的快照，或者当其他工具需要截断或剪短文件时。使用这个选项的时候，create 选项将没有效果，因为旧日志文件仍然保留。

copytruncate
    创建备份后，截断原有日志文件，而不是移动旧日志文件再 (可选地) 创建新的。它可以用来配合某些不能被告知关闭日志文件，因此总是在上一个日志文件中追加内容的程序。注意在复制文件和截断它之间有一个很小的时间间隙，因此可能有一些日志数据会丢失。当使用这个选项时，create 选项将没有效果，因为旧日志文件仍然保留。

create mode owner group
    在轮换之后 (在运行 postrotate 脚本之前)，立即建立日志文件 (与刚才轮换的日志文件同名)。mode 以八进制指定了日志文件的模式 (与 chmod(2) 中相同)，owner 指定了拥有日志文件的用户名，group 指定了日志文件从属的组。这些属性都可以忽略，这种情况下将使用与原文件相同的值。这个选项可以用 nocreate 选项来禁止。

daily
    按日轮换日志文件。

delaycompress
    延迟压缩上一次的日志文件，直到下次轮换循环再压缩。这个选项只有与 compress 连用才有意义。它可以用来配合某些不能被告知关闭日志文件，因此可能在一段时间内继续写上一个日志文件的程序。

extension ext
    轮换后，日志文件将赋予的扩展名。如果使用压缩，压缩的扩展名 (默认是 .gz) 出现在 ext 之后。

ifempty
    轮换文件，即使它是空的。它替换 notifempty 选项。(这个选项是默认的)

include file_or_directory
    读取作为参数的文件，就好像它的内容包含在 include 指令出现的地方。如果给出的是目录，那么目录中的大多数文件将以字母表顺序读入。唯一忽略的文件是非普通文件的那一些 (例如目录和命名管道)，以及扩展名为 taboo extensions 之一 (以 tabooext 指令指定) 的那一些。include 指令不能出现在日志文件定义内部。

mail address
    当一个日志文件被轮换出去，它被邮寄到 address。如果某个特殊的日志不应当产生邮件，可以使用 nomail 指令。

mailfirst
    当使用 mail 命令时，邮寄刚被轮换的那一个，而不是即将删除的那一个。

maillast
    当使用 mail 命令时，邮寄即将删除的那一个，而不是刚被轮换的那一个。(这是默认值)

missingok
    如果日志文件丢失，继续处理下一个，不报告错误消息。参见 nomissingok。

monthly
    日志文件在一个月内第一次运行 logrotate 时被轮换。(通常，是一个月的第一天)

nocompress
    旧版本的日志文件不会被压缩。参见 compress。

nocopy
    不复制原有的日志文件，将它保留。(覆盖了 copy 选项)

nocopytruncate
    在创建备份后，不截断原有的日志文件。(覆盖了 copytruncate 选项)

nocreate
    不创建新日志文件。(覆盖了 create 选项)

nodelaycompress
    不将上一个日志文件的压缩推迟到下次轮换循环。(覆盖了 delaycompress 选项)

nomail
    不将旧日志文件邮寄到任何地方。

nomissingok
    如果一个日志文件不存在，报告一个错误。这是默认值。

noolddir
    轮换的日志保留在原来的目录中。 (覆盖了 olddir 选项)

nosharedscripts
    为每个轮换运行 prerotate 和 postrotate。(这是默认值，覆盖了 sharedscripts 选项)

notifempty
    不轮换日志，如果它为空 (覆盖了 ifempty 选项)

olddir directory
    日志在轮换后被移动到目录 directory。directory 必须与轮换的日志文件在同一物理设备上，如果没有指定绝对路径就假定是相对于包含日志文件的目录的相对路径。使用这个选项时，所有旧版本的日志都在 directory 目录中了却残生。这个选项可以被 noolddir 选项覆盖。

postrotate/endscript
    在日志文件被轮换后，在 postrotate 和 endscript (它们必须出现在单独的一行) 之间的行将被执行。这些指令只能出现在日志文件定义中。参见 prerotate。

prerotate/endscript
    在日志文件被轮换前，在 prerotate 和 endscript (它们必须出现在单独的一行) 之间的行将被执行。这些指令只能出现在日志文件定义中。参见 postrotate。

firstaction/endscript
    在满足通配符模式的所有文件被轮换前，在运行 prerotate 脚本之前，如果至少有一个日志要被轮换，那么执行在 firstaction 和 endscript (它们必须出现在单独的一行) 之间的行。这些指令只能出现在日志文件定义中。参见 lastaction。

lastaction/endscript
    在满足通配符模式的所有文件被轮换后，在运行 postrotate 脚本之后，如果至少有一个日志被轮换了，那么执行在 lastaction 和 endscript (它们必须出现在单独的一行) 之间的行。这些指令只能出现在日志文件定义中。参见 firstaction。

rotate count
    日志文件被轮换 count 次，然后被删除或者邮寄到 mail 指令指定的地址。如果 count 是 0，旧版本的日志被删除，而不是被轮换。

size size
    日志文件在大于 size 字节时被轮换。如果 size 后跟 M，大小的单位将是兆字节。如果使用了 k，大小就是千字节。因此 size 100，size 100k 和 size 100M 都是合法的值。

sharedscripts
    通常，prescript 和 postscript 脚本为每一个轮换的日志文件都运行一次，意味着对于匹配多个日志文件的定义，单个脚本将被运行很多次 (例如 /var/log/news/* 的例子)。如果指定了 sharedscript，脚本将只运行一次，无论有多少文件匹配所给的通配符模式。但是，如果没有匹配模式的日志文件需要轮换，那么脚本不会被运行。覆盖了 nosharedscripts 选项。

start count
    这是用来作为轮换的基数的数字。例如，如果指定为 0，刚从原始日志文件轮换出的日志将以 .0 为扩展名。如果指定为 9，轮换的文件的扩展名将是 .9，跳过了 0-8。文件仍然会轮换 count 指令指定的次数。

tabooext [+] list
    修改当前的 taboo 扩展名列表 (参见 include 指令来获取使用 taboo 扩展的信息)。如果在扩展名前有 +，将添加到当前列表中，否则替换原列表。在启动时，taboo 扩展名列表包括 .rpmorig, .rpmsave, ,v, .swp, .rpmnew, 还有 ~ 。

weekly
    如果当前日期 (一个星期的某天) 小于上次轮换时的值，或者从上次轮换以来已经过了超过一个星期，那么对日志文件进行轮换。通常它是在每周的第一天进行轮换，但是如果 logrotate 不是每天运行的话这样会好一点。

FILES 文件
/var/lib/logrotate/status
    默认状态文件
/etc/logrotate.conf
    配置文件

SEE ALSO 参见
gzip(1)

AUTHORS
Erik Troan <ewt@redhat.com>
Preston Brown <pbrown@redhat.com>

TRANSBY
LinuxForum.Net CMPP 中文手册页计划 http://cmpp.linuxforum.net
* Tue Jun 22 2004 Yuan Yijun <bbbush@163.com>
- 初始版本