logrotate旋转python日志文件后在日志文件上创建空字节

时间:2020-07-06 05:47:18

标签: python logrotate

我有以下logrotate.conf:

/path/to/my/file.log {
    weekly
    copytruncate
    rotate 5
    size 25
    nocompress
    sharedscripts
}

我有以下执行我的python的bash脚本:

python /app/myscript.py >> /path/to/my/file.log 2>&1&

logrotate在开始运行空字节的create file.log后,如何解决?

2 个答案:

答案 0 :(得分:0)

您可以使用postrotate从日志中删除空值。

/path/to/my/file.log {
    weekly
    copytruncate
    rotate 5
    size 25
    nocompress
    sharedscripts
    postrotate
       sed -i -e 's/\o00//g' "$1"
    endscript

}

答案 1 :(得分:0)

如果您的文件由进程处理 'sed' 命令将破坏原始文件的 fs 条目

并且您的进程将写入已删除的文件!!

<块引用>

ll -i /var/log/tomcat/17/jcxu11r2d2_log4j.log 33554504 -rwxrwxr-x 1 usrcot17 cot 15957988 5 月 11 日 13:56 /var/log/tomcat/17/jcxu11r2d2_log4j.log

<块引用>

grep -l -P '\x00' /var/log/tomcat/17/jcxu11r2d2_log4j.log /var/log/tomcat/17/jcxu11r2d2_log4j.log l /proc/121203/fd/ | grep jcxu11r2d2_log4j.log lrwx------ 1 usrcot17 cot 64 May 11 02:09 210 -> /var/log/tomcat/17/jcxu11r2d2_log4j.log lrwx------ 1 usrcot17 cot 64 May 11 02:09 75 -> /var/log/tomcat/17/jcxu11r2d2_log4j.log sed -i -e 's/\o00//g' /var/log/tomcat/17/jcxu11r2d2_log4j.log ll -i /var/log/tomcat/17/jcxu11r2d2_log4j.log 33554503 -rwxrwxr-x 1 usrcot17 cot 832371 5 月 11 日 13:57 /var/log/tomcat/17/jcxu11r2d2_log4j.log grep -l -P '\x00' /var/log/tomcat/17/jcxu11r2d2_log4j.log l /proc/121203/fd/ | grep jcxu11r2d2_log4j.log l /proc/121203/fd/ |删除了grep lrwx------ 1 usrcot17 cot 64 May 11 02:09 210 -> /var/log/tomcat/17/sedzP6J1h(已删除) lrwx------ 1 usrcot17 cot 64 May 11 02:09 75 -> /var/log/tomcat/17/sedzP6J1h(已删除)

空字符是由于来自您的进程的缓冲写入 https://access.redhat.com/solutions/135193

我目前找到的唯一“好”解决方案是在应用程序进程中让日志轮换