logrotate故障排除分享:使用copytruncate轮询日志文件

我使用iotop工具定期抓取本地的io统计数据,通过zabbix客户端的key发送给zabbix服务器。这样就可以在zabbix上实时看到所有服务器的io数据了。在使用过程中发现。存放io数据的文件iotop.log增长很快。为了有效利用磁盘,就使用logrotate功能,对iotop.log文件进行rotate。配置如下:

/var/log/iotop.log {

    daily

    dateext

    rotate 5

    create 0755 root root

    sharescripts

    prerotate

              pkill  -9 iotop

    endscript

    postrotate

             /usr/sbin/iotop -d 60 -b -o -k >>/var/log/iotop.log

    endscript

}

 

手工执行logrotate命令,强制轮询iotop.log文件,没有问题。但当系统调用cron执行/etc/cron.daily/logrotate时,提示错误:

pkill: 13194 - Permission denied

无法执行。但手工执行都没有问题。为此折腾了好几天。

昨天终于解决了。问题原因是:

默认情况下,logrotate会把原始的iotop.log重命名,然后重新生成一个iotop.log文件。但我的程序iotop一直在调用iotop.log文件。导致iotop.log文件被重命名后,iotop程序还是把日志写到重命名后的文件中。导致我的zabbix客户端获取iotop.log中数据失败。

在本群中问了,网上资料也找了。没有结果。只能自己看logrotate的man。发现使用参数“copytruncate”可以解决问题。copytruncate的意思是先把原始文件拷贝一份重命名,然后把原始文件清空。这样,我简化我的logrotate文件为:

/var/log/iotop.log {

    copytruncate

    daily

    dateext

    rotate 5

    create 0755 root root

}

 

现在工作一切正常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值