logrotate切割日志后,新的日志还是写入到老的日志文件中
2017-05-09 18:03
197 查看
线上生产环境中,安装了dnsmasq,并记录日志。由于每一次dns查询都会生产日志,考虑到日志量越来越大,就用logrotate做日志轮转。配置如下:
配置后,用logrotate -f /etc/logrotate.d/dnsmasq 测试成功
但是新问题是,虽然日志被切断了,但是新的log不会写入到新的dnsmasq.log中,而是继续写入到dnsmasq.log-20170509中。
进过上网查资料发现,原因是:
虽然logrotate只是重命名了当前log,删了旧log,但是rsyslog不知道,打开的文件还是旧文件嘛。当然写的就是旧文件了。
解决办法:
网上查下来有以下两种解决办法:我只尝试了第一种,成功了。
1.加入copytruncate参数,拷贝后截断。
原理:可以理解为把内容拷贝走作为备份,然后清空当前文件。但是这有一个问题就是拷贝和截断之间会有时间差,存在丢数据的可能。
2.给rsyslog发信号。重新打开log文件。
在/etc/logrotate.d/zw_log里添加
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
postrotate表示在日志轮转后执行
sharedscripts表示zw_notice.log、zw_info.log两个日志共享这个脚本,就是说他俩轮转完成后只执行一次这个脚本,默认情况下是每个脚本轮转完成就执行一次
新的logrotate配置文件:
/var/log/dnsmasq/dnsmasq.log { daily //按天轮转日志 rotate 15 //保留15个log文件 compress //压缩轮转后的文件 delaycompress dateext missingok notifempty create 0664 root root }
配置后,用logrotate -f /etc/logrotate.d/dnsmasq 测试成功
[root@SRV-OPS10-DNS01 logrotate.d]# ls -l /var/log/dnsmasq/ total 8 -rw-r----- 1 root root 1 May 9 17:55 dnsmasq.log -rw-r----- 1 root root 1092 May 9 17:45 dnsmasq.log-20170509
但是新问题是,虽然日志被切断了,但是新的log不会写入到新的dnsmasq.log中,而是继续写入到dnsmasq.log-20170509中。
进过上网查资料发现,原因是:
虽然logrotate只是重命名了当前log,删了旧log,但是rsyslog不知道,打开的文件还是旧文件嘛。当然写的就是旧文件了。
解决办法:
网上查下来有以下两种解决办法:我只尝试了第一种,成功了。
1.加入copytruncate参数,拷贝后截断。
原理:可以理解为把内容拷贝走作为备份,然后清空当前文件。但是这有一个问题就是拷贝和截断之间会有时间差,存在丢数据的可能。
2.给rsyslog发信号。重新打开log文件。
在/etc/logrotate.d/zw_log里添加
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
postrotate表示在日志轮转后执行
sharedscripts表示zw_notice.log、zw_info.log两个日志共享这个脚本,就是说他俩轮转完成后只执行一次这个脚本,默认情况下是每个脚本轮转完成就执行一次
新的logrotate配置文件:
/var/log/dnsmasq/dnsmasq.log { daily //按天轮转日志 rotate 15 //保留15个log文件 compress //压缩轮转后的文件 copytruncate delaycompress dateext missingok notifempty create 0664 root root }
相关文章推荐
- Linux使用logrotate来切割日志文件
- Linux使用logrotate来切割日志文件
- Linux的日志文件管理工具——logrotate(linux日志切割与轮循)
- 日志文件切割服务logrotate配置及crontab定时任务的使用
- Linux 使用 logrotate 来切割日志文件
- Logrotate日志切割报错 文件不再同一个用户组下
- linux shell编程之文件内容写入和日志记录 推荐
- log4net 将日志按不同类型写入多个文件
- 请问数据库的完全备份包括对事务日志的备份吗?还是只包含数据文件的备份??差异备份包括对事务日志的备份吗?
- 使用logrotate 管理日志文件 (Linux相关)
- logrotate定时管理linux日志文件2
- 日志文件满而造成SQL数据库无法写入文件时,可用两种方法
- asp.net中当服务器出错时显示指定的错误页面,同时把错误信息写入系统日志文件
- 显示指定的错误页面,同时把错误信息写入系统日志文件
- log4net写入日志文件时一个奇怪的错误(附源码)
- ogre中显式写入日志文件
- log4net 将不同级别的信息写入不同的日志文件
- 设置Log4j 的properties文件,将日志写入数据库
- 使用cron,logrotate来管理日志文件
- asp.net中当服务器出错时显示指定的错误页面,同时把错误信息写入系统日志文件的探讨