Bboysoul's Blog

首页 公告 RSS

使用logrotate来轮转你的日志

December 31, 2021 本文有 989 个字 需要花费 2 分钟阅读

简介

之前一直是使用定时任务去切割日志的,今天使用了下logrotate还不错

操作

大部分操作系统都应该安装了logrotate,所以就不需要安装了,只需要配置就好了。

logrotate的配置文件在

/etc/logrotate.conf

里面你可以看到

include /etc/logrotate.d

这么一行配置,所以你只要在/etc/logrotate.d里面配置你要切割的日志就好了

给个我的配置

/data/nginx/nginx/logs/xxl-job.log {
    compress
    dateext
    copytruncate
    ifempty
    rotate 100
    olddir /data/nginx/nginx/logs/old
    size 500M
}

里面几个参数说下

  • compress 压缩日志
  • dateext 让日志以日期的形式去命名
  • copytruncate logrotate有两种方式滚动日志,一种是copytruncate,就是把老的日志复制一份,然后去做压缩重命名清空等操作,这种方式有个缺点就是当你在复制的时候有新的日志产生,那么这些日志可能会丢失,但是对于我的nginx丢了就丢了嘛,还有一种是create方式,这种是logrotate默认的方式,就是把原来的日志重命名,然后创建新的日志,之后告诉应用我创建了一个新的日志,这种方式可以避免日志丢失,但是也有一个缺点,就是当你的应用如果不支持重新打开新的日志文件,那么就不能使用了。简单来说create是移动老日志文件然后创建新的日志文件,copytruncate是先复制日志文件,然后清空
  • ifempty 表示即使是空的日志,那么我也要做转储,对应的是notifempty,表示如果是空日志,那么我就不转储了
  • rotate 100 表示保留100个日志转储文件,这个最好配置下,因为如果不配置,那么默认的是0,也就是你只会有一个转储文件
  • olddir 表示转储后的文件存放位置对应的是noolddir,表示日志文件和转储文件在同一个目录下面
  • size 500M 表示日志到了500M才做转储

其他常用参数

  • daily weekly monthly 表示每周每天每个月去转储一次
  • nocopytruncate 表示备份日志文件,但是不截断
  • nocreate 不创建新的日志
  • delaycompress 转储的日志在下一次转储的时候才压缩
  • nodelaycompress 转储的时候压缩
  • prerotate/endscript 在转储之前要执行的命令,比如使用create转储nginx的时候就需要加上
	postrotate
		[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
	endscript

什么时候进行转储

默认linux在

/etc/cron.daily/

下面有一个logrotate文件,里面大致是

#!/bin/sh

# skip in favour of systemd timer
if [ -d /run/systemd/system ]; then
    exit 0
fi

# this cronjob persists removals (but not purges)
if [ ! -x /usr/sbin/logrotate ]; then
    exit 0
fi

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE

也就是系统每天会定时使用cron去执行下/usr/sbin/logrotate /etc/logrotate.conf这个命令

如果你想要每一小时执行一次,那么添加到crontab里面把

欢迎关注我的博客www.bboy.app

Have Fun


Tags:

本站总访问量 本站总访客数