【linux】日志分割神器logrotate, 配置介绍

1. 安装

CentOS中直接使用yum安装

> yum -y install logrotate

2.运行机制

logrotate的运行依赖 crontab, 安装logrotate后, 自动在 /etc/cron.daily 目录下添加 logrotate 文件

内容如下:

> cat logrotate
#!/bin/sh

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

可见, 定时任务是以 /etc/logrotate.conf 为配置文件执行logrotate命令.

3.logrotate配置

查看 /etc/logrotate.conf 配置文件内容.

> cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# system-specific logs may be also be configured here.

可以看到 配置文件风格和nginx的配置文件类似, 可以在/etc/logrotate.d目录下添加自定义配置文件.

logrotate 从命令行指定的一系列配置文件中读取有关它应该处理的日志文件的所有内容。 每个配置文件都可以设置全局选项(本地定义覆盖全局,后面的定义覆盖前面的)并指定要轮换的日志文件。 一个简单的配置文件如下所示:


compress                              # 全局配置, 配置日志切割后文件会被压缩

/var/log/messages {                   # 单个文件的配置, 只对 /var/log/messages 文件生效  
    rotate 5                          # 切割后,保留最近的5次切割结果文件
    weekly                            # 每周运行一次
    postrotate                        # 之日被切割后, 执行以下脚本中命令
        /usr/bin/killall -HUP syslogd
    endscript
}

"/var/log/httpd/access.log" /var/log/httpd/error.log {   # 对access.log 和 error.log两个文件生效
    rotate 5
    mail www@my.org                   # 超过5次的文件,不被删除, 而是以邮件格式发送到www@my.org
    size 100k                         # 日志大小超过 100k 时, 进行切割
    sharedscripts                     # sharedscripts 意味着 postrotate 脚本将只运行一次(在旧日志被压缩之后),而不是为每个轮换的日志运行一次
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}

/var/log/news/* {                     # /var/log/news 中所有文件配置
    monthly                           
    rotate 2
    olddir /var/log/news/old          # 切割后数据放入指定目录 /var/log/news/old
    missingok                         # 在日志轮循期间,任何错误将被忽略
    postrotate
        kill -HUP 'cat /var/run/inn.pid'
    endscript
    nocompress                        # 转储文件不压缩
}

常用配置参数

  • daily :切分周期为每天
  • weekly :切分周期为每周
  • monthly :切分周期为每月
  • dateext : 归档旧版本的日志文件,添加像 YYYYMMDD 这样的每日扩展名. 
  • dateformat : 指定 dateext 的扩展名格式,
  • rotate count :指定日志文件删除之前保留的的次数,count = 0 指没有备份,3 指保留 3 个文件
  • missingok:在日志轮循期间,任何错误将被忽略,例如 “文件无法找到” 之类的错误。
  • size size:当日志文件到达指定的大小时出发切分,例如 100,  100k, 100m
  • compress: 旧版本的日志文件默认使用 gzip(1) 压缩
  • nocompress: 不压缩
  • create mode owner group : 转储文件,使用指定的文件模式, mode 以八进制指定日志文件的模式(与 chmod相同),owner 指定将拥有日志文件的用户名,group 指定日志文件所属的组
  • nocreate: 不建立新的日志文件
  • prerotate/endscript: 在切分之前需要执行的命令可以放入这个对,这两个关键字必须单独成行
  • postrotate/endscript:  在切分之后指定的命令
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
logrotate是一个用于管理日志文件的工具,它可以定期轮转、压缩和删除日志文件,以便节省磁盘空间并保持日志文件的可读性。logrotate配置文件通常位于/etc/logrotate.conf或/etc/logrotate.d/目录下。 logrotate配置文件的基本结构如下: 1. 日志文件路径:指定需要轮转的日志文件路径,可以使用通配符来匹配多个文件。 2. 轮转规则:定义了轮转的频率和方式,包括轮转周期、保留的旧日志文件数量、是否压缩等。 3. 轮转后的操作:可以指定轮转后需要执行的操作,如发送通知、重新启动相关服务等。 以下是一个logrotate配置文件的示例: ``` /var/log/example.log { rotate 7 daily compress delaycompress missingok notifempty create 0644 root root postrotate /usr/bin/killall -HUP example_daemon endscript } ``` 上述配置文件中,"/var/log/example.log"是需要轮转的日志文件路径。配置项的含义如下: - rotate 7:保留7个旧日志文件。 - daily:每天执行一次轮转。 - compress:压缩旧日志文件。 - delaycompress:延迟压缩,下次轮转时才压缩上一次轮转生成的旧日志文件。 - missingok:如果日志文件不存在,不报错。 - notifempty:如果日志文件为空,不轮转。 - create 0644 root root:创建新的日志文件,并设置权限为0644,所有者为root。 - postrotate...endscript:在轮转后执行的操作,此处是重新加载example_daemon服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值