目录
[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
个旧日志文件。同时启用压缩和延迟压缩选项,确保旧日志文件被正确处理。missingok
和 notifempty
选项表示允许出现不存在日志文件或者日志文件为空的情况。最后的 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/logrotate
是 logrotate
程序的路径,-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
可以使用k
或M
作为单位,表示KB
或MB
。missingok
:指定日志文件不存在时是否继续轮转。如果指定了该选项,则当日志文件不存在时,logrotate 将继续执行轮转操作,而不会报错。monthly
:指定日志文件按月进行轮转。如果指定了该选项,则每月的第一天0:00
会进行一次轮转操作。nocompress
:指定不对旧日志文件进行压缩。nocopy
:指定不复制当前日志文件到另一个位置或名称。这个选项是默认情况下的,所以如果不想复制就不需要使用它。nocopytruncate
:指定不复制当前日志文件到另一个位置或名称,并且不截断当前日志文件。这个选项是默认情况下的,所以如果不想复制就不需要使用它。nodelaycompress
:指定立即压缩旧日志文件,而不是延迟到下一次轮转时再压缩。nomail
:指定不发送电子邮件。这个选项是默认情况下的,所以如果不想发送电子邮件就不需要使用它。nomailfirst
:在执行轮转操作之前不发送电子邮件。nomaillast
:在执行轮转操作之后不发送电子邮件。noolddir
:指定不在备份文件名中包含旧目录名。notifempty
:指定日志文件为空时是否继续轮转。如果指定了该选项,则当日志文件为空时,logrotate 将继续执行轮转操作,而不会报错。olddir directory
:将旧日志文件移动到指定的目录中,而不是删除它们。这个选项可以用来做备份或其他处理。postrotate/endscript
:在轮转操作完成后执行指定的命令。所有命令都应该在postrotate
和endscript
之间,以便Logrotate可以正确地解析它们。prerotate/endscript
:在轮转操作开始之前执行指定的命令。所有命令都应该在prerotate
和endscript
之间,以便Logrotate可以正确地解析它们。rotate count
:指定日志文件轮转后要保留的旧日志文件数量。例如,rotate5
表示只保留最新的5
个日志文件,旧的日志文件将被删除。rotate log-entries-count
:指定在轮转之前应该写入多少条日志记录。这个选项可以用来防止在轮转操作中丢失一些日志记录。sharedscripts
:在每个日志文件轮转之后只执行一次postrotate
和prerotate
脚本,而不是每个匹配的文件都执行一次脚本。size size
:指定日志文件达到指定大小后就执行轮转操作。size 可以使用k
或M
作为单位,表示KB
或 MB。start count
:指定轮转操作从第几次开始生效。tabootext
:不要轮转包含指定文本(例如“session”)的文件。weekly
:指定日志文件按周进行轮转。如果指定了该选项,则每周的第一个星期天0:00
会进行一次轮转操作。yearly
:指定日志文件按年进行轮转。如果指定了该选项,则每年的第一天0:00
会进行一次轮转操作。