V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Buffer2Disk
V2EX  ›  程序员

一个写日志文件流被重定向的奇怪问题

  •  
  •   Buffer2Disk · 2019-08-15 17:10:29 +08:00 · 1066 次点击
    这是一个创建于 1927 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在是有 3 个程序

    1.golang 的程序,内部文件流写日志到 /var/log/a.log

    filePath = "/var/log/a.log"

    wrt = io.MultiWriter(openFile(filePath))

    func openFile(filePath string) io.Writer {
    f, e := os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
    if e != nil {
    log.Fatalf("error opening file: %v", e)
    }
    return f
    }


    2.
    golang 的程序通过 supervisor 来管理的,supervisor 配置如下
    把标准输出流也重定向写入到 a.log 这个文件里面去
    stdout_logfile=/var/log/a.log
    stderr_logfile=/var/log/a.log


    3.
    每天零点的时候有个 shell 脚本会去定时切割一下日志,写在 crond 里面的
    cp /var/log/a.log /var/log/2019-08-15-a.log
    echo "" >/var/log/a.log



    现在的问题是,在某一天,发现 /var/log 路径下的日志变成了 2 个文件
    /var/log/a.log /var/log/a.log.1

    然后 golang 的程序输出日志也全部到 a.log.1 这个文件里面去了
    a.log 文件里面变成了空了,shell 脚本切割出来的日志也是空的,

    这个情况并不是每天都会发生,是某一天会偶然发生,这是为啥呢?
    4 条回复    2019-08-16 13:18:38 +08:00
    shangsharon
        1
    shangsharon  
       2019-08-16 00:53:55 +08:00 via Android
    supervisor 会自动切割日志的,你可以试试让程序输出大量的日志,达到 super..的设置量了就会切割的
    Buffer2Disk
        2
    Buffer2Disk  
    OP
       2019-08-16 11:32:51 +08:00
    @shangsharon 卧槽,还真有这个可能,谢谢大佬
    Buffer2Disk
        3
    Buffer2Disk  
    OP
       2019-08-16 13:17:32 +08:00
    @shangsharon 查出来了,确实是这个问题,谢谢大佬
    Buffer2Disk
        4
    Buffer2Disk  
    OP
       2019-08-16 13:18:38 +08:00
    设置如下就可以让 supervisor 禁止自动切割备份日志了
    # no limit on the size
    stdout_logfile_maxbytes=0
    stderr_logfile_maxbytes=0

    # no backup with supervisor
    stdout_logfile_backups=0
    stderr_logfile_backups=0
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1081 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:48 · PVG 02:48 · LAX 10:48 · JFK 13:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.