• 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
    
    
    [root@localhost 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两个日志共享这个脚本,就是说他俩轮转完成后只执行一次这个脚本,默认情况下是每个脚本轮转完成就执行一次
  • 相关阅读:
    反射
    关于EwebEeditor 不能上传图片问题解决方法
    js去掉前后空格
    园子开张
    使用Python 爬取 京东 ,淘宝。 商品详情页的数据。(避开了反爬虫机制)
    c#对于加密的一点整合 (AES,RSA,MD5,SHA256)
    移动战略调查:应用开发者首选微软Windows
    Surface Pro打包微软精华 今晚在华开售
    Ceph学习全过程 基于N版
    k8s中部署wordpress
  • 原文地址:https://www.cnblogs.com/chjbbs/p/6429007.html
Copyright © 2020-2023  润新知