logrotate工具搭配crontab进行日志文件切割

学习日志切割

logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用。
(1)配置文件介绍
Linux系统默认安装logrotate工具,它默认的配置文件在:
/etc/logrotate.conf 主要的配置文件
/etc/logrotate.d/ 是一个目录,该目录里的所有文件都会被主动的读入/etc/logrotate.conf中执行

另外,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则以/etc/logrotate.conf这个文件的设定来作为默认值。

Logrotate是基于CRON(定时器)来运行的,其脚本是/etc/cron.daily/logrotate,日志轮转是系统自动完成的。
实际运行时,Logrotate会调用配置文件/etc/logrotate.conf。
可以在/etc/logrotate.d目录里放置自定义好的配置文件,用来覆盖Logrotate的缺省值。
对于某些设备每天产生巨量的日志文件,单个日志文件将非常巨大,不便管理。通过logrorate轮询把大的日志文件切割成单个100M(根据实际需要更改设置)左右的小日志文件,方便查看和导出。
在/etc/logrotate.d/目录下新建文件logcut, 把以下内容添加进去。

# vi /etc/logrotate.d/logcut
/var/log/deviceslog/*.log# 此目录根据实际情况更改,注意要和实际日志暂存目录一致。
{
daily     #日志文件每天正常轮询一次
size 100M  # 设定设备单个日志文件的大小,当大于100M时开始切割文件。
Nocreate#切割后不建立新日志文件
rotate  55000 #日志轮询切割的次数
missingok#转储出现错误不报警
copytruncate#把将日志文件内容copy到新的转储文件
notifempty  #空文件不做转储
dateext    #设定文件转储格式
dateformat.%Y-%m-%d-%s   #转储文件格式以 .年-月-日-秒结尾
noolddir#转储到当前目录
nocompress#不压缩转储文件
sharedscripts  #执行脚本
postrotate#转储后执行以下脚本。
!注意:请把postrotate命令放在prerotate命令之前(像如下顺序放置),不然可能会遇到文件转储不成功的问题。
logs_path="/var/log/deviceslog"    
$ 设置日志文件存储路径,此目录根据实际情况更改,注意要和实际日志暂存目录一致。

dates_folder=`date -d "today" +"%Y%m%d"` #获取当前日期
find ${logs_path}/. -maxdepth 1 -name  *.log.* | while read name; do newname=$(echo ${name%%_*.*}) > /dev/null 2>&1#读取日志暂存目录的转储日志文件,取得IP地址。
mkdir -pv $newname/${dates_folder} > /dev/null 2>&1
#为各设备分别建立日志文件存储目录,按日期分类。

mv -f  $newname*.log.*  $newname/$dates_folder> /dev/null 2>&1  
#把日志文件转移到各设备日志文件对应的日期目录
done 
prerotate  #转储前执行以下脚本
logs_path="/var/log/deviceslog"
dates_folder=`date -d "today" +"%Y%m%d"` 
dates_yesterday=`date -d "yesterday" +"%Y%m%d"`   #获取前一日的日期
find ${logs_path}/. -maxdepth 1 -name  *.log | while read name; do newname=$(echo ${name%%_*.*}) > /dev/null 2>&1 
#读取暂存目录的前一日的日志文件,取得IP地址。
mkdir -pv $newname/$dates_folder> /dev/null 2>&1 

#为各设备分别建立日志文件存储目录,按日期分类。
mkdir -pv $newname/$dates_yesterday> /dev/null 2>&1  

#为各设备分别提前建立前一天的日志文件存储目录,按日期分类。
mv -f  $newname*-${dates_yesterday}*.*  $newname/${dates_yesterday}  > /dev/null 2>&1

#转储前是否有前一天未做文件分割的日志,如果有则转移到对应的设备日期目录。
done
endscript
}

定时切割及文件索引配置

配置定时任务,设定多长时间检查日志文件大小,检查是否需要切割,以及定时建立日志文件的索引,为web 获取日志文件信息做准备。
建立文件索引存储目录:

# mkdir -pv /var/log/deviceslog/logindex

建立定时任务:

# crontab -e 
#输入以下代码,保存后将为当前用户建立一个crontab文件。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=
#每5分钟检查 /etc/logrotate.d/logcut,看是否满足文件切割条件(大于100M) ,根据设备日志文件生成的速度和大小调整这个时间,确保生成的日志转储文件在100M左右。
*/5 * * * * /usr/sbin/logrotate/etc/logrotate.d/logcut

#每5分钟定时建立日志文件索引,并输出到logfilesindex.txt 文件
*/5 * * * * find /var/log/deviceslog/. -fls  /var/log/deviceslog/logindex/logindex.txt

Crontab 格式说明:
crontab

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值