logrotate译

旧时模样 提交于 2020-08-19 19:31:08

logrotate旨在简化对生成大量日志文件的系统的管理。支持自动轮训,压缩,删除和邮寄日志文件。每个日志文件可以按每天,每周,每月或文件大小进行处理。

默认logrotate以每天为周期的定时任务运行。除了以日志文件大小为切割条件或者手动使用 -f (--force) 参数切割的任务每天会切割多次,其他条件下同一任务每天只处理一次。

文件

  • /var/lib/logrotate.status:默认状态记录文件;
  • /etc/logrotate.conf:配置文件

参数

  • -d, --debug: 调试用,打印执行结果,不会真正执行;

  • -f, --force: 强制执行,用于刚添加或修改任务或历史切割文件被删除后,强制执行切割(每天只执行一次)。

  • -m, --mail <command> : 指定logrotate发送邮件时使用的命令,该命令需接收两个参数:邮件主题;邮件接收人。该命令必须阅读标准输入上的消息并将其邮寄给收件人。默认命令:/bin/mail -s

  • -s, --state <statefile>: 指定记录logrotate执行结果的文件,在使用特定用户执行logrotate时较有用。

  • --usage:

    打印简短的使用信息。

  • --?, --help:

    打印帮助信息。

  • -v, --verbose: 开启详细模式。

使用配置文件

logrotate可以批量从配置文件中读取关于日志切割的配置信息,配置文件中定义要切割的文件、切割规则等信息。

示例:

compress  # 全局参数,对本配置中所有单元生效

/var/log/messages {
    rotate 5  # 保留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  # 指定文件切割条件,≥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: 指定开启compress时压缩文件扩展名,默认使用指定压缩命令的默认扩展名;
  • compressoptions: 为压缩命令指定参数,默认为gzip指定参数,如指定压缩level(默认为'-9');
  • copy: 复制日志文件,不改变原文件。该选项可以在日志文件做快照或日志文件需要清空/做分析时使用。使用该选项时,create 选项不生效。
  • copytruncate: 复制原文件并清空原日志文件,不改变原文件(inode)。当无法告知某些程序关闭其日志文件时,可以使用它,从而可能永远继续写入(追加)以前的日志文件。请注意,复制文件和截断文件之间的时间间隔非常短,因此可能会丢失一些日志记录数据。使用此选项时,create 选项将无效,因为旧的日志文件将保留在原位。
  • create <mode> <owner> <group>: 切割后立即(在运行postrotate脚本之前)创建日志文件(与刚切割的日志文件同名)。可以指定文件的mode、owner、group,可以省略任何日志文件属性,在这种情况下,新文件的那些属性将使用与原始日志文件相同的值作为被省略的属性。可以使用nocreate选项禁用此选项。
  • daily: 每天切割一次日志文件;
  • dateext: 切割后的文件使用日期作为扩展名,如YYYYMMDD,可以用 dateformat 指定扩展名格式;
  • dateformat:%Y %m %d %s 指定扩展名时间格式,默认为 %Y%m%d
  • delaycompress: 将上一个日志文件的压缩推迟到下一个循环周期。仅在与compress结合使用时才有效。当无法告知某些程序关闭其日志文件并因此可能在一段时间内继续写入以前的日志文件时,可以使用它。
  • extension ext: 保留原有文件名后缀。如在使用compress时,原文件为 mylog.foo,rotate后想保留文件名为 mylog.1.foo.gz 而不是mylog.foo.1.gz,就可以通过该选项实现。
  • ifempty: 即便文件是空文件也依然切割。
  • include file_or_directory: 读取作为参数给出的文件,就好像该文件包含在包含指令出现的行内。如果给出了目录,则在继续处理包含文件之前,将按字母顺序读取该目录中的大多数文件。唯一被忽略的文件是非常规文件(例如目录和命名管道)以及名称以tabooext指令指定的忌讳扩展名之一结尾的文件。 include指令可能不会出现在日志文件定义中。
  • mail address: 发送邮件,跟邮件地址。
  • mailfirst: 使用mail时,发送最新切割的文件而不是即将过期的文件。
  • maillast: 使用mail时,发送即将过期的文件而不是最新切割的文件。
  • maxage count: 删除 count 天数之前的切割文件。
  • minsize size: 指定进行rotate 的日志文件size,即达到这个size就进行切割。
  • missingok: 如果文件不存在,继续执行。
  • monthly: 以第一次切割时间为基准,每个月切割一次。
  • nocompress: 不压缩切割后的文件。
  • nocopy: 不copy原文件。
  • nocopytruncate: 创建文件副本后,不清空原文件。
  • nocreate: 不创建新文件。
  • nodelaycompress: 不要将上一个日志文件的压缩推迟到下一个循环周期(这会覆盖delaycompress选项)。
  • nodateext: 不使用date做为切割后文件的扩展名。
  • nomail: 不发送邮件。
  • nomissingok: 如果文件不存在,则报错(默认)。
  • noolddir: 切割后的文件存放在原目录(默认)。
  • nosharedscripts: 为每个循环的日志文件运行prerotate和postrotate脚本(这是默认设置,并且覆盖了sharedscripts选项)。日志文件的绝对路径作为第一个参数传递给脚本。如果脚本错误退出,则仅对受影响的日志不执行其余操作。
  • noshred: 删除旧的日志文件时,不使用shred。
  • notifempty: 不切割空文件。
  • olddir directory: 指定切割后的文件存放位置。
  • postrotate/endscript: 切割日志文件后,将执行sharedscriptssharedscripts之间的行(两者都必须自己显示在行上)。这些指令只能出现在日志文件定义中。通常,日志文件的绝对路径作为第一个参数传递给脚本。如果指定了sharedscripts,则整个模式都将传递到脚本。另请参见prerotate。有关错误处理,请参见sharedscriptsnosharedscripts
  • prerotate/endscript: 仅在日志实际切割之前(使用/ bin / sh)执行prerotateendscript之间的行(两者都必须自己显示在行上)。 这些指令只能出现在日志文件定义中。 通常,日志文件的绝对路径作为第一个参数传递给脚本。 如果指定了sharedscripts,则将整个模式传递到脚本。 另请参见postrotate。 有关错误处理,请参见sharedscriptsnosharedscripts
  • firstaction/endscript: 仅在切割所有与通配符模式匹配的日志文件之前,在运行prerotate脚本之前并且仅在至少有一个以下命令的情况下,执行一次(使用/ bin / shfirstactionendscript之间的行(两者都必须自己出现在行中) 日志实际上将被轮换。 这些指令只能出现在日志文件定义中。 整个模式作为第一个参数传递给脚本。 如果脚本错误退出,则不做进一步处理。 另请参阅lastaction
  • lastaction/endscript: 在切割所有与通配符模式匹配的日志文件之后,在运行postrotate脚本之后,并且仅当至少一个 日志被切割。 这些指令只能出现在日志文件定义中。 整个模式作为第一个参数传递给脚本。 如果脚本错误退出,则仅显示错误消息(这是最后一个操作)。 另请参阅firstaction
  • rotate count: 在删除日志文件或将其邮寄到mail指令中指定的地址之前,会对日志文件进行轮换计数。 如果count为0,则将删除旧版本,而不是切割旧版本。保留几个切割后文件 count 就指定为几。
  • size size: 仅当日志文件变得更大然后再增大大小字节时,才对日志文件进行轮换。 如果size后面跟着k,则假定大小为千字节。 如果使用M,则大小以兆字节为单位;如果使用G,则大小以千兆字节为单位。 因此大小100,大小100k,大小100M和大小100G均有效。
  • sharescripts: 通常,对每个循环日志运行prerotatepostrotate脚本,并将日志文件的绝对路径作为第一个参数传递给脚本。 这意味着单个脚本可以针对与多个文件匹配的日志文件条目多次运行(例如/ var / log / news / *示例)。 如果指定了sharedscripts,则无论有多少个日志与通配符模式匹配,脚本都只会运行一次,并且整个模式都将传递给它们。 但是,如果该模式中的所有日志都不需要轮换,则这些脚本将完全不会运行。 如果脚本错误退出,则其余操作将不会对任何日志执行。 此选项将覆盖nosharedscripts选项,并暗含create选项。
  • shred: 使用shred -u而不是unlink()删除日志文件。 这应确保在计划删除日志后不可读; 默认情况下是关闭的。 另请参见noshred。
  • shredcycles count: 要求GNU shred(1)覆盖删除前的日志文件计数次数。 没有此选项,将使用shred的默认值。
  • start count: 这是用作切割基准的数字。 例如,如果指定0,则从原始日志文件轮换后,将创建扩展名为.0的日志。 如果指定9,将以.9(跳过0-8)创建日志文件。 文件仍将切割使用count指令指定的次数。
  • tabooext [+] list: 当前的禁忌扩展名列表已更改(有关禁忌扩展名的信息,请参见include指令)。 如果扩展名列表前面有+,则将扩展当前的禁忌扩展名列表,否则将被替换。 在启动时,禁忌扩展名列表包含.rpmorig,.rpmsave,.v,.swp,.rpmnew,〜,.cfsaved和.rhn-cfg-tmp- *。
  • weekly: 以第一次切割时间为基准,每个星期切割一次。
  • yearly: 以第一次切割时间为基准,每年切割一次。

参考

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!