手册页部分 1M: 系统管理命令

退出打印视图

更新时间: 2014 年 7 月
 
 

logadm(1M)

名称

logadm - 管理不断增长的日志文件

用法概要

logadm 
logadm [-options] 
logname...

描述

logadm 是常规日志轮转工具,适合从 cron(1M) 运行。

不带参数时,logadm 读取 /etc/logadm.conf 文件,对于该文件中的每个条目,检查对应的日志文件以确认是否应轮转该文件。通常,该检查根据 root 用户的 crontab 中的条目在每天上午执行。

如果指定了 logname 参数,logadm 会通过添加一个后缀来重命名对应的日志文件,以便使最近的日志文件以 .0 结尾(即,logfile.0),下一个最近的文件以 .1 结尾(即,logfile.1),依此类推。缺省情况下,会保留十个旧日志文件版本(即,logfile.0logfile.9)。当要记录第十一个文件时,logadm 会自动删除最旧的版本,以保持文件总数为十。

logadm 接受多个选项。您可以在命令行上或在 /etc/logadm.conf 文件中指定这些选项。logadm 命令在 /etc/logadm.conf 中搜索 logname options 格式的行

logname

标识 /etc/logadm.conf 中的条目。该值可以是日志文件的名称或路径名。如果为此字段指定日志文件时未采用具体名称,必须设为完全限定路径名。

options

该字段标识的选项与要在命令行上输入的选项完全相同。这允许将常用日志轮转策略存储在 /etc/logadm.conf 文件中。请参见“示例”部分。

如果同时在 /etc/logadm.conf 和命令行中指定了 options,将会首先应用 /etc/logadm.conf 文件中的选项。因此,命令行选项将覆盖 /etc/logadm.conf 中的选项。

/etc/logadm.conf 中指定的日志文件名可能包含文件名替换字符,例如 *?csh(1) 支持这些字符。

由两个选项控制轮转日志文件的时间。这两个选项为:–s(大小)和 –p(时间段)。

当同时使用这两个选项时,这两者之间存在隐含的关系。这意味着,轮转日志之前必须满足所有条件。

如果这两个选项都未指定,轮转日志文件的缺省条件为:–s 1b – p 1w,这意味着仅当大小非零并且自上次轮转之后已过 1 周时,才会轮转日志文件。

如果指定 –pnever 作为轮转条件,将忽略任何其他轮转条件,并且 logadm 将转为使旧日志文件过期。如果指定 –p now 作为轮转条件,将强制执行日志轮转。

如果未指定 –o–g–m 选项,logadm 会通过创建所有者、组 ID 和权限与原始文件匹配的空文件来替换原始日志文件(在重命名该文件之后替换)。

由三个选项控制旧日志文件过期的时间:–A(寿命)、–C(计数)、–S(大小)。这些选项将使最旧的日志文件过期,直至满足特定的一个或多个条件。例如,–C 5–S 10m 选项组合将使旧日志文件过期,直至日志文件总数不超过 5 个并且这些文件的总磁盘使用量不超过 10 MB。如果这些选项都未指定,则缺省过期选项为 –C 10,即保留十个旧日志文件。如果没有文件要过期,使用 –C 0 作为缺省值来阻止过期。

logadm 将时间戳存储在 /var/logadm/timestamps 文件中。对于使用以前版本的 logadm 的用户,该实用程序会自动将时间戳从 /etc/logadm.conf(以前的系统信息库)移至 /var/logadm/timestamps

选项

支持以下选项:

–a post_command

在重命名日志文件之后执行 post_commandpost_command 将传递到 sh –c

请将 post_command 指定为有效 shell 命令。使用引号括起 post_command 中的空格或 shell 元字符。

此选项可用于重新启动正在写入文件的守护进程。使用一个 logadm 命令轮转多个日志时,post_command 仅在轮转所有日志之后执行一次,而不是在轮转每个日志之后执行一次。

–A age

删除在 age 指定的时间内尚未修改的任何版本。

age 指定为一个数字,后跟 h(小时)、d(天)、w(周)、m(月)或 y(年)。

–b pre_command

在重命名日志文件之前执行 pre_commandpre_command 将传递到 sh –c

请将 pre_command 指定为有效 shell 命令。使用引号括起 pre_command 中的空格或 shell 元字符。

此选项可用于停止正在写入文件的守护进程。使用一个 logadm 命令轮转多个日志时,pre_command 仅在轮转所有日志之前执行一次,而不是在轮转每个日志之前执行一次。

–c

通过以下方式轮转日志文件:复制原始日志文件,然后将原始日志文件截断到长度为零,而不重命名该日志文件。

–C count

删除最旧的版本,直至保留的文件不超过 count 个。

如果未指定任何过期选项(–A–C–S),则缺省值为 –C 10。要阻止自动添加缺省过期规则,请指定 –C 0

–e mail_addr

通过电子邮件将错误消息发送到 mail_addr

由于 logadm 通常从 cron(1M) 运行,因此 cron 将捕获错误消息并通过邮件发送到 crontab 的所有者。

如果希望将与错误消息相关的邮件发送到其他地址,此选项非常有用。如果未遇到任何错误,则不会生成邮件消息。

–E cmd

执行 cmd 使文件过期,而不是删除旧日志文件使文件过期。

cmd 将传递到 sh –c。在 cmd 完成之后,该文件将视为已过期。如果 cmd 未删除或重命名旧日志文件,会在下次对指定的日志文件运行 logadm 时将该日志文件视为过期。如果指定的 cmd 中存在关键字 $file,该关键字将扩展为要过期的文件的名称。

此选项对许多任务都非常有用,例如将旧日志文件通过邮件发送给管理员,或者将旧日志文件复制到用于长期存储的设备。

–f conf_file

使用 conf_file 而非 /etc/logadm.conf

此选项允许非 root 用户保留自己的 logadm 配置文件。

–F timestamp_file

使用 timestamp_file 而非 /var/logadm/timestamps 存储 logadm 时间戳。

–g group

使用由 group 指定的 ID 创建一个新的空文件,而不保留日志文件的组 ID。

chgrp (1) 可接受的名称或数值组 ID 指定 group

此选项要求用户能够使用 chgrp(1) 命令更改文件组所有权。

–h

输出描述 logadm 选项的帮助消息。

–l

命名轮转日志文件时使用本地时间而不是世界标准时间 (Coordinated Universal Time, UTC)(请参见随 –t 选项提供的模板中百分比序列的讨论)。

–m mode

使用由 mode 指定的模式创建一个新的空文件,而不保留日志文件的模式。

chmod(1) 命令可接受的任意格式指定 mode

–M cmd

使用 cmd 重命名日志文件。如果指定了关键字 $file,其将扩展为日志文件的名称。类似地,关键字 $nfile 将扩展为日志文件的新名称。$nfile 关键字仅可用于带 –M 选项的命令。该命令完成之后,日志文件将替换为轮转文件。缺省 cmd 是 “/bin/mv $file$nfile”。

–n

输出 logadm 命令将执行的操作而不实际执行这些操作。

此选项用于在对系统进行任何更改之前检查参数。

但是务必注意,由于使用此选项时只会输出日志轮转操作,logadm 可能找不到需要过期的文件,但如果在不使用 –n 的情况下运行,logadm 可能会因执行日志轮转操作而创建需要过期的文件。因此,即使在使用 –n 选项时未看到有文件要过期,在不使用该选项时仍可能有文件会过期。

–N

在指定的日志文件不存在时阻止生成错误消息。通常情况下,logadm 未找到日志文件时会生成错误消息。使用 –N 时,如果日志文件不存在,logadm 会转为使用过期规则(如果有),然后转为使用下一个日志文件(如果有),而不会创建空的替换日志文件。

–o owner

使用 owner 创建一个新的空日志文件,而不保留日志文件的所有者。

chown(1) 命令可接受的任意格式指定 owner

–p period

在经过指定的时间段 (period) 之后轮转日志文件。

period 指定为一个数字,后跟 d(天)、h(小时)、w(周)、m(月,按 30 天算)或者 y(年)。时间段还有两个特殊值:now never。“–p now” 强制进行日志轮转。“–p never” 不进行任何日志轮转。

–P timestamp

logadm 用于将上次轮转日志的时间记录到 /var/logadm/timestamps

此选项使用 timestamp 确定是否已过日志轮转时间段。timestamp 的格式与 ctime(3C) 生成的格式匹配,使用引号括起嵌入的空格。timestamp 始终采用世界标准时间 (Coordinated Universal Time, UTC) 时区记录。

–r

/etc/logadm.conf 中删除对应于指定 logname 的所有条目。

–R cmd

当通过日志轮转创建旧日志文件时运行 cmd。如果指定的命令中嵌入了关键字 $file,该关键字将扩展为刚才通过日志轮转创建的旧日志文件的名称。

此选项用于在轮转日志之后处理日志文件内容。cmd 通过传递给 sh – c 来执行。使用一个 logadm 命令轮转多个日志时,带 –R 的命令在每次轮转日志时执行一次。此命令用于对日志文件进行后期处理(即,对日志文件进行排序、删除不感兴趣的行等)。–a 选项更适合在日志轮转之后重新启动守护进程。

–s size

仅当日志文件的大小大于或等于 size 时才轮转日志文件。

size 指定为一个数字,后跟字母 b(字节)、k (KB)、m (MB) 或 g (GB)。

–S size

删除最旧的版本,直至旧日志文件使用的总磁盘空间小于指定的大小。

size 指定为一个数字,后跟字母 b(字节)、k (KB)、m (MB) 或 g (GB)。

–t template

指定重命名日志文件时要使用的模板。

template 可以是一个简单名称,例如 /var/adm/oldfile,也可以包含通过 logadm 扩展的格式为 $ word 的特殊关键字。允许的序列包括:

$basename

不包含目录名的日志文件名

$dirname

要轮转的文件所在的目录

$domain

扩展为 domainname 的输出

$file

要轮转的文件的全路径名

$isa

扩展为 uname –p 的输出

$machine

扩展为 uname –m 的输出

$n

版本号 0 是最新版本,1 是次最新版本,依此类推

$N

与 $n 相同,但从 1 而不是从零开始

$nodename

扩展为 uname –n 的输出

$platform

扩展为 uname –i 的输出

$release

扩展为 uname –r 的输出

$secs

00:00:00 UTC, January 1,1970 起经过的秒数

$zonename

扩展为 zonename(1) 的输出。

要真正地在文件名中包含美元符号字符,请使用 $$。此外,也允许使用 strftime(3C) 接受的任何百分比序列,例如 %d 将扩展为一个月份中的某天。要真正地在文件名中包含百分比符号字符,请使用 %%。美元符号关键字和百分比序列可以出现在模板中的任意位置。如果模板生成的路径名中含有不存在的目录,则在轮转日志文件时将会根据需要创建这些目录。

如果没有指定 –t 选项,缺省模板为 $file.$n。日志文件的实际轮转(每个版本逐一上移,直至过期)使用 $n 关键字执行。如果模板不包含 $n 关键字,日志文件将仅重命名为新名称,然后应用过期规则(如果有)。

–T pattern

logadm 查找旧日志文件列表时,通常将模板(使用 –t 选项指定)转变为模式,然后查找名称与该模式匹配的现有文件。–T 选项会导致改用给定的模式。

如果其他程序使用旧日志文件名执行操作(例如压缩一段时间内的日志文件的 cron 作业),则此选项会非常有用。该模式采用路径名格式,其中可包含 csh(1) 文件名替换支持的特殊字符(例如 *?)。

–v

以详细模式输出有关要执行的操作的信息。

–V

验证配置文件。

此选项验证 /etc/logadm.conf 文件中是否存在指定的 logname 条目以及该条目的语法是否正确。如果未指定 logname,则将验证配置文件中的所有条目。如果指定了 logname 参数,命令将验证该条目的语法。如果找到该条目,将输出该条目并且命令的退出值为 true。否则退出值为 false。

–w entryname

将条目写入与当前命令行参数对应的配置文件(即 /etc/logadm.conf)中。如果已经存在指定的 entryname 对应的条目,会首先删除该条目。这是更新 /etc/logadm.conf 的首选方法,原因是该语法可防止语法错误。entrynamelogadm 调用中的参数。可以为 entryname 选择易于记住的名称,或者设置为日志文件的路径名。如果使用的是路径名而不是具体名称,则必须为完全限定路径名。

如果未在 logadm 命令行中提供日志文件名,系统将假定条目名称与日志文件名相同。例如,以下两行效果相同,即保留轮转日志文件的两个副本:


% logadm -C2 -w mylog /my/really/long/log/file/name
% logadm -C2 -w /my/really/long/log/file/name

–z count

执行其他所有命令之后压缩旧日志文件。将会保留 count 个最近日志文件不压缩,因此这 count 个最近文件易于查阅。将 count 设为零可压缩所有旧日志。

压缩通过 gzip (1) 执行,生成的日志文件的后缀为 .gz

操作数

支持下列操作数:

logname

标识 /etc/logadm.conf 中条目的名称。如果 logname 字段中指定了日志文件名,系统将假定 logname 与实际日志文件名相同。

示例

示例 1 轮转文件并保留以前版本

以下示例轮转 /var/adm/exacct/proc 文件,并在 /var/adm/exacct/proc.0 /var/adm/exacct/proc.9 中保留十个以前版本。

通知 logadm 复制文件并将该文件截断。


 % logadm -c /var/adm/exacct/proc

示例 2 轮转系统日志

以下示例轮转 syslog 并保留八个日志文件。旧日志文件将放入目录 /var/oldlogs 而不是 /var/log 中:


% logadm -C8 -t'/var/oldlogs/syslog.$n' /var/log/syslog

示例 3 轮转 /var/adm/sulog 并基于寿命使文件过期

根据 /etc/logadm.conf 文件的以下条目轮转 /var/adm/sulog 文件,并使寿命大于 30 天的所有副本过期。


/var/adm/sulog -A 30d

示例 4 轮转文件并基于磁盘使用量使文件过期

根据 /etc/logadm.conf 文件的以下条目轮转 /var/adm/sulog 文件,并在所有轮转日志文件的总空间量大于 100 MB 时使旧日志文件过期。


/var/adm/sulog -S 100m

示例 5 创建用于存储日志文件名的条目

此示例创建一个用于存储日志文件名的条目,实际上需要在 /etc/logadm.conf 中保留 20 个副本,但 –p never 意味着每天上午从 root 的 crontab 运行的常规 logadm 将忽略该条目。


% logadm -w locallog /usr/local/logfile -C20 -p never

为此,在命令行上使用以下条目覆盖 –p never 选项:


 % logadm -p now locallog

示例 6 轮转 apache 错误和访问日志

以下示例会每月轮转 apache 错误和访问日志并基于当前年份和月份为文件命名。将保留 24 个最近副本并在重命名日志之后通知 apache 重新启动。

此命令运行一次,由于指定了 –w 选项,将在 /etc/logadm.conf 中创建一个条目,之后轮转 apache 日志。


 % logadm -w apache -p 1m -C 24\
     -t '/var/apache/old-logs/$basename.%Y-%m'\
     -a '/usr/apache/bin/apachectl graceful'\
     '/var/apache/logs/*{access,error}_log'

此示例还说明了用 –w 选项提供的条目名称无需与日志文件名匹配。在此示例中,条目名称为 apache,运行该行之后,可以通过执行以下命令来强制运行 /etc/logadm.conf 中的该条目:


% logadm -p now apache

由于与 apache 日志文件名匹配的表达式括在引号中,因此会将该表达式(而非其扩展的文件列表)存储在 /etc/logadm.conf。这意味着每次 logadmcron 运行时,它将扩展表达式,并检查生成的列表中的所有日志文件,确认这些文件是否需要轮转。

以下命令是未使用引号将日志名称表达式括起来的一个示例。shell 将最后一个参数扩展为输入命令时存在的一个日志文件列表,并将一个条目写入用于轮转文件的 /etc/logadm.conf 中。


logadm -w apache /var/apache/logs/*_log

文件

/etc/logadm.conf

logadm 命令的配置文件

/var/logadm/timestamps

记录时间戳的系统信息库

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/core-os
接口稳定性
Committed(已确定)

另请参见

chgrp(1)chmod(1)chown(1)csh(1)gzip (1)、cron(1M)ctime(3C)strftime(3C)logadm.conf(4)attributes(5)

附注

logadm 应用过期条件(通过 –A–C–S 选项提供)时,系统将删除文件(首先删除最旧的文件),直到满足这些条件。如果用于命名旧日志的模板包含 $n $Nlogadm 会首先选择旧日志文件名中值最大的 $n$N。如果使用的模板为其他模板,logadm 将使用修改时间确定首先要过期的文件。如果旧日志文件在轮转之后做了修改,可能不会遵循此行为。

日志文件轮转可能非常耗时,具体取决于日志文件的大小和数量。

缺省情况下,logadm 按照 UTC 工作。因此,写入 /etc/logadm.conf 文件(请参见 logadm.conf(4))的所有条目都将具有 UTC 时间戳。用户可以使用 –l 选项将 logadm 设置为本地时间。

–f–F 选项可以指定同一文件,在这种情况下,logadm 恢复为先前版本的行为。即,时间戳将写入配置文件。