目录

[TOC]


更新一个简洁版:

确保/etc/logrotate.conf中有这一行:

include /etc/logrotate.d

创建一个通用配置default :

touch /etc/logrotate.d/default

将下面的配置文件粘贴进去:

/path/to/folder1/*.log \
/home/*.log {
    weekly
    missingok
    rotate 180
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        docker exec nginx nginx -s reopen
    endscript
}

编辑完了退出就行,不放心就手动运行一次:logrotate -f /etc/logrotate.d/default
如果不想让root以外的其他用户读取,可以改为create 0640 root root
以后要添加就直接在default配置里面加一行就行


介绍

Logrotate 是一款在 Linux 系统上经常用来管理日志文件的程序,它可以按时间、大小等条件对日志文件进行轮转和切割,避免单个日志文件过大,占用过多磁盘空间。

使用 logrotate 的简单步骤

1.创建 logrotate 配置文件:在 /etc/logrotate.d/ 目录下创建一个新的配置文件,例如 program。你可以使用任何文本编辑器来创建该文件,并在其中添加要管理的日志文件和相关选项。

2.配置日志文件:在配置文件中指定要管理的日志文件和相关选项。下面是一个简单的示例:

/var/log/program.log {
    size 10M
    rotate 5
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
}

上述示例中,/var/log/program.log 文件会在大小达到 10MB 时进行轮转,并保留最多 5 个旧日志文件。同时启用压缩和延迟压缩选项,确保旧日志文件被正确处理。missingoknotifempty 选项表示允许出现不存在日志文件或者日志文件为空的情况。最后的 create 指令用于在轮转后重新创建一个空日志文件,保证下一次输出日志时不会出现权限问题。

3.测试配置文件:使用 logrotate -d -f /etc/logrotate.d/program 命令测试配置文件是否正确。该命令会模拟 logrotate 的运行并输出详细的日志信息,以便你检查配置是否正确。

4.运行 logrotate:将 logrotate 添加到 cron 中定期运行,以便按照配置轮转和切割指定的日志文件。例如可以在 crontab 中添加以下行:

0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.d/program >/dev/null 2>&1

上述示例中,/usr/sbin/logrotatelogrotate 程序的路径,-f 参数表示强制执行轮转操作,/etc/logrotate.d/program 是要轮转的配置文件。最后的 >/dev/null 2>&1 表示将所有输出重定向到空设备,避免产生额外的输出信息。

5.检查日志和磁盘空间:查看轮转后的日志文件是否满足预期,并确保不会占用过多的磁盘空间。


使用include在全局配置文件中引用,而不是使用crontbab

Logrotate 支持全局配置文件,因此你可以将所有日志文件的配置选项统一保存在 /etc/logrotate.conf/etc/logrotate.d/ 目录下的一个名为 logrotate.conf 的配置文件中。这样,在运行 logrotate 时会按照该配置文件中指定的选项对所有日志文件进行轮转和管理,无需单独为每个日志文件设置 crontab

在全局配置文件中,你可以通过 include 指令包含其他配置文件,从而实现不同日志文件采用不同的配置。例如,你可以创建一个名为 /etc/logrotate.d/program 的配置文件,然后在 /etc/logrotate.conf 文件中添加如下内容:

include /etc/logrotate.d/program

这样,logrotate 就会按照 /etc/logrotate.d/program 中的配置选项对 /var/log/program.log 文件进行轮转和管理。

值得注意的是,全局配置文件的优先级高于单个配置文件。如果多个配置文件中存在相同的日志文件,则以全局配置文件中的选项为准。因此,在使用全局配置文件时,要确保各个配置文件没有冲突或者重叠的选项。

例子:在 /etc/logrotate.conf 中同时指定多个日志文件,并为每个文件指定不同的规则

/home/scripts/log/program.log {
    size 10M
    rotate 5
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
}

/var/log/nginx/access.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 644 nginx nginx
}

如果你在 /etc/logrotate.conf 文件中指定了某个日志文件的轮转规则,那么这些规则将适用于所有使用该日志文件的程序。这可能会对其他应用程序的日志记录或其他操作产生不良影响。

因此,在指定全局日志文件时,需要非常谨慎地考虑每个配置选项的作用,以确保不会影响其他应用程序的正常运行。如果你只想为某个特定的应用程序设置单独的日志文件轮转规则,最好将其放在一个独立的配置文件中(例如 /etc/logrotate.d/appname),而不是在全局配置文件中指定。这样可以避免发生意外的错误,并确保各个应用程序的日志文件被正确管理。

说人话就是:不要直接在全局文件中配置,推荐用include引用

选项详解

  • compress:指定日志文件轮转后是否进行压缩。如果指定了该选项,则旧日志文件将被压缩为gzip格式。
  • copy:将当前日志文件复制到指定的路径,而不是修改原始文件名并创建一个新文件。这个选项适用于某些应用程序需要保持不间断的日志记录,而logrotate需要对日志备份进行轮换的情况。
  • copytruncate:将当前日志文件复制到指定的路径,并截断当前日志文件。这个选项也适用于某些应用程序需要保持不间断的日志记录,而logrotate需要对日志备份进行轮换的情况。
  • create [mode] [owner] [group]:指定日志文件不存在时的创建模式、所有者和所属组。例如,create 644 root root 表示当日志文件不存在时,logrotate 将创建该文件,并将其权限设置为 644,所有者和所属组为 root
  • daily:指定日志文件按天进行轮转。如果指定了该选项,则每天的0:00会进行一次轮转操作。
  • dateext:在生成备份文件时,使用日期作为备份文件名的一部分,以避免备份文件名重复。
  • delaycompress:指定日志文件轮转后是否延迟压缩。如果指定了该选项,则旧日志文件将在下一次轮转时进行压缩。
  • errors address:指定错误消息要发送到的电子邮件地址。如果发生错误,则会发送一封电子邮件给指定的地址。
  • ifempty:指定当日志文件为空时,是否执行轮转操作。如果未指定此选项,并且日志文件为空,则不会执行轮转操作。
  • include file_or_directory:包含其他配置文件或目录,在父级logrotate中处理这些文件或目录。
  • mail address:指定日志轮转操作完成后要发送电子邮件的收件人地址。
  • mailfirst:在执行轮转操作之前发送电子邮件。
  • maillast:在执行轮转操作之后发送电子邮件。
  • maxage count:指定要保留的最大日志文件数量。当超过指定数量时,最旧的日志文件将被删除。
  • minsize size:指定日志文件达到指定大小后才执行轮转操作。size 可以使用kM作为单位,表示KBMB
  • missingok:指定日志文件不存在时是否继续轮转。如果指定了该选项,则当日志文件不存在时,logrotate 将继续执行轮转操作,而不会报错。
  • monthly:指定日志文件按月进行轮转。如果指定了该选项,则每月的第一天0:00会进行一次轮转操作。
  • nocompress:指定不对旧日志文件进行压缩。
  • nocopy:指定不复制当前日志文件到另一个位置或名称。这个选项是默认情况下的,所以如果不想复制就不需要使用它。
  • nocopytruncate:指定不复制当前日志文件到另一个位置或名称,并且不截断当前日志文件。这个选项是默认情况下的,所以如果不想复制就不需要使用它。
  • nodelaycompress:指定立即压缩旧日志文件,而不是延迟到下一次轮转时再压缩。
  • nomail:指定不发送电子邮件。这个选项是默认情况下的,所以如果不想发送电子邮件就不需要使用它。
  • nomailfirst:在执行轮转操作之前不发送电子邮件。
  • nomaillast:在执行轮转操作之后不发送电子邮件。
  • noolddir:指定不在备份文件名中包含旧目录名。
  • notifempty:指定日志文件为空时是否继续轮转。如果指定了该选项,则当日志文件为空时,logrotate 将继续执行轮转操作,而不会报错。
  • olddir directory:将旧日志文件移动到指定的目录中,而不是删除它们。这个选项可以用来做备份或其他处理。
  • postrotate/endscript:在轮转操作完成后执行指定的命令。所有命令都应该在postrotateendscript之间,以便Logrotate可以正确地解析它们。
  • prerotate/endscript:在轮转操作开始之前执行指定的命令。所有命令都应该在prerotateendscript之间,以便Logrotate可以正确地解析它们。
  • rotate count:指定日志文件轮转后要保留的旧日志文件数量。例如,rotate5表示只保留最新的5个日志文件,旧的日志文件将被删除。
  • rotate log-entries-count:指定在轮转之前应该写入多少条日志记录。这个选项可以用来防止在轮转操作中丢失一些日志记录。
  • sharedscripts:在每个日志文件轮转之后只执行一次postrotateprerotate脚本,而不是每个匹配的文件都执行一次脚本。
  • size size:指定日志文件达到指定大小后就执行轮转操作。size 可以使用kM作为单位,表示KB或 MB。
  • start count:指定轮转操作从第几次开始生效。
  • tabootext:不要轮转包含指定文本(例如“session”)的文件。
  • weekly:指定日志文件按周进行轮转。如果指定了该选项,则每周的第一个星期天0:00会进行一次轮转操作。
  • yearly:指定日志文件按年进行轮转。如果指定了该选项,则每年的第一天0:00会进行一次轮转操作。
Last modification:October 8, 2024
V50%看看实力