跳过导航链接 | |
退出打印视图 | |
手册页第 1M 部分:系统管理命令 Oracle Solaris 11.1 Information Library (简体中文) |
- 管理不断增长的日志文件
logadm
logadm [-options] logname...
logadm 是常规日志轮转工具,适合从 cron(1M) 运行。
不带参数时,logadm 读取 /etc/logadm.conf 文件,对于该文件中的每个条目,检查对应的日志文件以确认是否应轮转该文件。通常,该检查根据 root 用户的 crontab 中的条目在每天上午执行。
如果指定了 logname 参数,logadm 会通过添加一个后缀来重命名对应的日志文件,以便使最近的日志文件以 .0 结尾(即,logfile.0),下一个最近的文件以 .1 结尾(即,logfile.1),依此类推。缺省情况下,会保留十个旧日志文件版本(即,logfile.0 到 logfile.9)。当要记录第十一个文件时,logadm 会自动删除最旧的版本,以保持文件总数为十。
logadm 接受多个选项。您可以在命令行上或在 /etc/logadm.conf 文件中指定这些选项。logadm 命令在 /etc/logadm.conf 中搜索 logname options 格式的行
标识 /etc/logadm.conf 中的条目。该值可以是日志文件的名称或路径名。如果为此字段指定日志文件时未采用具体名称,必须设为完全限定路径名。
该字段标识的选项与要在命令行上输入的选项完全相同。这允许将常用日志轮转策略存储在 /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。
支持以下选项:
在重命名日志文件之后执行 post_command。post_command 将传递到 sh -c。
请将 post_command 指定为有效 shell 命令。使用引号括起 post_command 中的空格或 shell 元字符。
此选项可用于重新启动正在写入文件的守护进程。使用一个 logadm 命令轮转多个日志时,post_command 仅在轮转所有日志之后执行一次,而不是在轮转每个日志之后执行一次。
删除在 age 指定的时间内尚未修改的任何版本。
将 age 指定为一个数字,后跟 h(小时)、d(天)、w(周)、m(月)或 y(年)。
在重命名日志文件之前执行 pre_command。pre_command 将传递到 sh -c。
请将 pre_command 指定为有效 shell 命令。使用引号括起 pre_command 中的空格或 shell 元字符。
此选项可用于停止正在写入文件的守护进程。使用一个 logadm 命令轮转多个日志时,pre_command 仅在轮转所有日志之前执行一次,而不是在轮转每个日志之前执行一次。
通过以下方式轮转日志文件:复制原始日志文件,然后将原始日志文件截断到长度为零,而不重命名该日志文件。
删除最旧的版本,直至保留的文件不超过 count 个。
如果未指定任何过期选项(-A、-C 或 -S),则缺省值为 -C 10。要阻止自动添加缺省过期规则,请指定 -C 0。
通过电子邮件将错误消息发送到 mail_addr。
由于 logadm 通常从 cron(1M) 运行,因此 cron 将捕获错误消息并通过邮件发送到 crontab 的所有者。
如果希望将与错误消息相关的邮件发送到其他地址,此选项非常有用。如果未遇到任何错误,则不会生成邮件消息。
执行 cmd 使文件过期,而不是删除旧日志文件使文件过期。
cmd 将传递到 sh -c。在 cmd 完成之后,该文件将视为已过期。如果 cmd 未删除或重命名旧日志文件,会在下次对指定的日志文件运行 logadm 时将该日志文件视为过期。如果指定的 cmd 中存在关键字 $file,该关键字将扩展为要过期的文件的名称。
此选项对许多任务都非常有用,例如将旧日志文件通过邮件发送给管理员,或者将旧日志文件复制到用于长期存储的设备。
使用 conf_file 而非 /etc/logadm.conf 。
此选项允许非 root 用户保留自己的 logadm 配置文件。
使用 timestamp_file 而非 /var/logadm/timestamps 存储 logadm 时间戳。
使用由 group 指定的 ID 创建一个新的空文件,而不保留日志文件的组 ID。
以 chgrp(1) 可接受的名称或数值组 ID 指定 group。
此选项要求用户能够使用 chgrp(1) 命令更改文件组所有权。
输出描述 logadm 选项的帮助消息。
命名轮转日志文件时使用本地时间而不是世界标准时间 (Coordinated Universal Time, UTC)(请参见随 -t 选项提供的模板中百分比序列的讨论)。
使用由 mode 指定的模式创建一个新的空文件,而不保留日志文件的模式。
以 chmod(1) 命令可接受的任意格式指定 mode。
使用 cmd 重命名日志文件。如果指定了关键字 $file,其将扩展为日志文件的名称。类似地,关键字 $nfile 将扩展为日志文件的新名称。$nfile 关键字仅可用于带 -M 选项的命令。该命令完成之后,日志文件将替换为轮转文件。缺省 cmd 是 “/bin/mv $file$nfile”。
输出 logadm 命令将执行的操作而不实际执行这些操作。
此选项用于在对系统进行任何更改之前检查参数。
但是务必注意,由于使用此选项时只会输出日志轮转操作,logadm 可能找不到需要过期的文件,但如果在不使用 -n 的情况下运行,logadm 可能会因执行日志轮转操作而创建需要过期的文件。因此,即使在使用 -n 选项时未看到有文件要过期,在不使用该选项时仍可能有文件会过期。
在指定的日志文件不存在时阻止生成错误消息。通常情况下,logadm 未找到日志文件时会生成错误消息。使用 -N 时,如果日志文件不存在,logadm 会转为使用过期规则(如果有),然后转为使用下一个日志文件(如果有),而不会创建空的替换日志文件。
使用 owner 创建一个新的空日志文件,而不保留日志文件的所有者。
以 chown(1) 命令可接受的任意格式指定 owner。
在经过指定的时间段 (period) 之后轮转日志文件。
将 period 指定为一个数字,后跟 d(天)、h(小时)、w(周)、m(月,按 30 天算)或者 y(年)。时间段还有两个特殊值:now 和 never。“-p now” 强制进行日志轮转。“-p never” 不进行任何日志轮转。
logadm 用于将上次轮转日志的时间记录到 /var/logadm/timestamps。
此选项使用 timestamp 确定是否已过日志轮转时间段。timestamp 的格式与 ctime(3C) 生成的格式匹配,使用引号括起嵌入的空格。timestamp 始终采用世界标准时间 (Coordinated Universal Time, UTC) 时区记录。
从 /etc/logadm.conf 中删除对应于指定 logname 的所有条目。
当通过日志轮转创建旧日志文件时运行 cmd。如果指定的命令中嵌入了关键字 $file,该关键字将扩展为刚才通过日志轮转创建的旧日志文件的名称。
此选项用于在轮转日志之后处理日志文件内容。cmd 通过传递给 sh - c 来执行。使用一个 logadm 命令轮转多个日志时,带 -R 的命令在每次轮转日志时执行一次。此命令用于对日志文件进行后期处理(即,对日志文件进行排序、删除不感兴趣的行等)。-a 选项更适合在日志轮转之后重新启动守护进程。
仅当日志文件的大小大于或等于 size 时才轮转日志文件。
将 size 指定为一个数字,后跟字母 b(字节)、k (KB)、m (MB) 或 g (GB)。
删除最旧的版本,直至旧日志文件使用的总磁盘空间小于指定的大小。
将 size 指定为一个数字,后跟字母 b(字节)、k (KB)、m (MB) 或 g (GB)。
指定重命名日志文件时要使用的模板。
template 可以是一个简单名称,例如 /var/adm/oldfile,也可以包含通过 logadm 扩展的格式为 $ word 的特殊关键字。允许的序列包括:
不包含目录名的日志文件名
要轮转的文件所在的目录
扩展为 domainname 的输出
要轮转的文件的全路径名
扩展为 uname -p 的输出
扩展为 uname -m 的输出
版本号 0 是最新版本,1 是次最新版本,依此类推
与 $n 相同,但从 1 而不是从零开始
扩展为 uname -n 的输出
扩展为 uname -i 的输出
扩展为 uname -r 的输出
自 00:00:00 UTC, January 1,1970 起经过的秒数
扩展为 zonename(1) 的输出。
要真正地在文件名中包含美元符号字符,请使用 $$。此外,也允许使用 strftime(3C) 接受的任何百分比序列,例如 %d 将扩展为一个月份中的某天。要真正地在文件名中包含百分比符号字符,请使用 %%。美元符号关键字和百分比序列可以出现在模板中的任意位置。如果模板生成的路径名中含有不存在的目录,则在轮转日志文件时将会根据需要创建这些目录。
如果没有指定 -t 选项,缺省模板为 $file.$n。日志文件的实际轮转(每个版本逐一上移,直至过期)使用 $n 关键字执行。如果模板不包含 $n 关键字,日志文件将仅重命名为新名称,然后应用过期规则(如果有)。
logadm 查找旧日志文件列表时,通常将模板(使用 -t 选项指定)转变为模式,然后查找名称与该模式匹配的现有文件。-T 选项会导致改用给定的模式。
如果其他程序使用旧日志文件名执行操作(例如压缩一段时间内的日志文件的 cron 作业),则此选项会非常有用。该模式采用路径名格式,其中可包含 csh(1) 文件名替换支持的特殊字符(例如 * 和 ?)。
以详细模式输出有关要执行的操作的信息。
验证配置文件。
此选项验证 /etc/logadm.conf 文件中是否存在指定的 logname 条目以及该条目的语法是否正确。如果未指定 logname,则将验证配置文件中的所有条目。如果指定了 logname 参数,命令将验证该条目的语法。如果找到该条目,将输出该条目并且命令的退出值为 true。否则退出值为 false。
将条目写入与当前命令行参数对应的配置文件(即 /etc/logadm.conf)中。如果已经存在指定的 entryname 对应的条目,会首先删除该条目。这是更新 /etc/logadm.conf 的首选方法,原因是该语法可防止语法错误。entryname 是 logadm 调用中的参数。可以为 entryname 选择易于记住的名称,或者设置为日志文件的路径名。如果使用的是路径名而不是具体名称,则必须为完全限定路径名。
如果未在 logadm 命令行中提供日志文件名,系统将假定条目名称与日志文件名相同。例如,以下两行效果相同,即保留轮转日志文件的两个副本:
% logadm -C2 -w mylog /my/really/long/log/file/name % logadm -C2 -w /my/really/long/log/file/name
执行其他所有命令之后压缩旧日志文件。将会保留 count 个最近日志文件不压缩,因此这 count 个最近文件易于查阅。将 count 设为零可压缩所有旧日志。
压缩通过 gzip(1) 执行,生成的日志文件的后缀为 .gz。
支持下列操作数:
标识 /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。这意味着每次 logadm 从 cron 运行时,它将扩展表达式,并检查生成的列表中的所有日志文件,确认这些文件是否需要轮转。
以下命令是未使用引号将日志名称表达式括起来的一个示例。shell 将最后一个参数扩展为输入命令时存在的一个日志文件列表,并将一个条目写入用于轮转文件的 /etc/logadm.conf 中。
logadm -w apache /var/apache/logs/*_log
logadm 命令的配置文件
记录时间戳的系统信息库
有关下列属性的说明,请参见 attributes(5):
|
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 或 $N,logadm 会首先选择旧日志文件名中值最大的 $n 或 $N。如果使用的模板为其他模板,logadm 将使用修改时间确定首先要过期的文件。如果旧日志文件在轮转之后做了修改,可能不会遵循此行为。
日志文件轮转可能非常耗时,具体取决于日志文件的大小和数量。
缺省情况下,logadm 按照 UTC 工作。因此,写入 /etc/logadm.conf 文件(请参见 logadm.conf(4))的所有条目都将具有 UTC 时间戳。用户可以使用 -l 选项将 logadm 设置为本地时间。
-f 和 -F 选项可以指定同一文件,在这种情况下,logadm 恢复为先前版本的行为。即,时间戳将写入配置文件。