服务器日志切割问题

a)     切割日志问题:由于一期的任务系统采用的是记录事件日志的形式,事件日志会定期的由logback删除,但是定时器的日志parser.log并没有采用logback来管理删除,在运行了一段时间之后发现parser.log文件过大,于是采用shell脚本的形式来切割日志文件:

     #!/bin/bash

logs_path="/data/lobbytask-src/schedule"

ymonth=`date -d "yesterday" +"%Y%m"`

ydate=`date -d "yesterday" +"%d"`

back_path="${logs_path}/log/${ymonth}/${ydate}"

echo "${ydate}"

echo "${back_path}"

mkdir -p ${back_path}

cp ${logs_path}/*.log ${back_path}/

> ${logs_path}/parser.log

最终发现,这种情况是有问题的,发现最后一句“> ${logs_path}/parser.log” 将日志文件清空的功能是有效的,但是,就在清空的瞬间变成0大小之后,又瞬间变回去了。于是采用专门的日志切割工具来尝试:

采用 logrotate

一般情况,ubuntu会自带这个工具,没有话,也可以用apt-get安装,主配置文件:/etc/logrotate.conf,这个文件里include文件夹;etc/logrotate.d,那么我就在这个文件夹下面新建我的文件:lobbytask:

/data/lobbytask-src/schedule/parser.log

{

     daily

     rotate 10

    copytruncate

     compress

     notifempty

    prerotate

    echo `du -sh /data/lobbytask-src/schedule/parser.log`

    endscript

    postrotate

    echo `du -sh /data/lobbytask-src/schedule/parser.log`

    endscript

}

 

然后使用命令 `/usr/sbin/logrotate /etc/logrotate.conf ` 来执行,最后结果发现跟自己写shell一样,日志文件大小瞬间变成0之后又变回去了。

得出结论:像这样跑出来的日志文件,由于一直处于打开的读写状态,所以无法清空。与nginx不同的是,nginx的日志切割普遍采用将日志文件移除,然后采用kill -USR1 $(cat /usr/local/nginx/nginx.pid) 发信号给nginx主程序,通知其重新打开一次日志文件。那么,我的这个parser.log只能每次切割的时候停掉定时器,然后再重启,代价太大,最终改成了由logback来管理,每个30天自动删除,问题解决。    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值