logrotate日志不轮转呢?_新日志size0
Posted Chen Jian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logrotate日志不轮转呢?_新日志size0相关的知识,希望对你有一定的参考价值。
程序,要管理log,留作日后的后续功能处理和统计和领导需要。因为懒得写,所以直接用了syslog函数,把log交给rsyslog去写了。然后用logrotate每天做日志轮转。 两种log分别发送到了local6.info和local6.notice。 #define logInfo(...) pthread_mutex_lock(&logLock);\ logLen=snprintf(logBuf,sizeof(logBuf),__VA_ARGS__);syslog(LOG_INFO,logBuf,logLen);pthread_mutex_unlock(&logLock) #define logUpload(...) pthread_mutex_lock(&logLock);\ logLen=snprintf(logBuf,sizeof(logBuf),__VA_ARGS__);syslog(LOG_NOTICE,logBuf,logLen);pthread_mutex_unlock(&logLock) ... openlog("zhuowang_SS",LOG_PID|LOG_CONS,LOG_LOCAL6); ... 在/etc/rsyslog.conf里添加了 local6.info /var/log/zw_info.log local6.notice /var/log/zw_notice.log 在/etc/logrotate.d/建新文件zw_log [[email protected] logrotate.d]# cat zw_log /var/log/zw_notice.log /var/log/zw_info.log { nocompress daily rotate 21 } 意为他俩不压缩、每天轮转、保留21份。 但是运行却发现每天虽然在生成新日志文件,但是日志还是被写到旧文件里去。好好研究了一下发现这错误犯的真2,rsyslog和logrotate根本就是两个软件包两回事嘛。虽然logrotate重命名了当前log,删了旧log,但是rsyslog不知道哇,打开的文件还是旧文件嘛。当然写的就是旧文件了嘛。 经探索后发现这个问题有两种解决办法。 1.copytruncate,拷贝后截断。 把当前log拷贝后截断。可以理解为把内容拷贝走作为备份,然后清空当前文件。但是这有一个问题就是拷贝和截断之间会有时间差,存在丢数据的可能。 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日志不轮转呢?_新日志size0的主要内容,如果未能解决你的问题,请参考以下文章