logrotate日志轮转
目录
logrotate旨在简化对生成大量日志文件的系统的管理。它允许自动转储,压缩,删除和发送日志文件。每个日志文件可以在每天、每周、每月或日志文件达到一定大小时处理。
安装
主流Linux发行版上都默认安装了logrotate。如果没有,可以使用下面的命令安装:
- Debian/Ubuntu:
|
|
- Fedora/CentOS/RHEL:
|
|
配置
配置文件路径
/etc/logrotate.conf
,为全局配置,通常不需要要修改;- 在
/etc/logrotate.d/
目录下,为各应用的具体配置,通常以应用程序名称来命名文件。
配置参数
以12306轮询的配置为例(/etc/logrotate.d/12306
):
|
|
daily
:日志切割的执行周期。可以为"daily”、“weekly”、“monthly"或者"yearly”。rotate 20
:最多保留20个日志备份。第21个日志备份文件生成时,最早的日志备份将被删除。dateext
:日志文件切割时文件名后缀添加日期,形如query.log-20180210
,日期格式可在/etc/logrotate.conf
中配置。不加该参数时,默认添加阿拉伯数字后缀。copytruncate
:使用该参数后,拷贝原日志文件作为备份,并且将原文件清空。优点是兼容性好,缺点是拷贝和清空之间的时间差会丢数据。如果没有配置该选项,默认的方式是,把旧日志文件改名为备份文件名 ,然后创建新日志文件,并告知应用程序使用新的描述符。missingok
:在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。notifempty
:如果日志文件为空的话,不转储。create 644 chi chi
:使用指定的文件模式创建新日志文件。
运行
Logrotate是基于CRON来运行的,其脚本是/etc/cron.daily/logrotate
,日志轮转是系统自动完成的。
题外话,不同cron任务的执行时间分别为:
/etc/cron.daily/
下面的任务都是每天6:25 执行;/etc/cron.weekly/
下面的任务都是每周日 6:47 执行;/etc/cron.monthly/
下面的任务都是每月1号 6:52 执行;
因此默认情况下,日志转储都在早上6:25执行。
自动运行
无需任何设置。logrotate每天会执行一次,检查是否需要做日志转储。
手动运行
如果想自定义运行时间,那么可以将logrotate加入到cron定时任务中去。由于logrotate每天至多执行一次的原则,我们自己加入到cron中的定时任务执行后,自动运行的任务就不会执行了。
当然这要求我们自己任务的执行时间在6:25之前,否则需要删除/etc/cron.daily/logrotate
阻止其自动运行才可以。
⚠️:定义的任务必须是root用户的定时任务,格式为:
|
|