Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
logrotate在旋转python日志文件之后在日志文件上创建空字节_Python_Logrotate - Fatal编程技术网

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

logrotate在旋转python日志文件之后在日志文件上创建空字节,python,logrotate,Python,Logrotate,我有以下logrotate.conf: /path/to/my/file.log { weekly copytruncate rotate 5 size 25 nocompress sharedscripts } 我有以下bash脚本来执行python: python /app/myscript.py >> /path/to/my/file.log 2>&1& logrotate在开始时以空字节运行其creat

我有以下logrotate.conf:

/path/to/my/file.log {
    weekly
    copytruncate
    rotate 5
    size 25
    nocompress
    sharedscripts
}
我有以下bash脚本来执行python:

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

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

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

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

}

如果您的文件由进程处理 “sed”命令将破坏origina文件的fs条目

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

ll-i/var/log/tomcat/17/jcxu11r2d2_log4j.log 33554504-RWXR-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 ll/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-RWXR-x 1 usrcot17 cot 832371 May 11 13:57/var/log/tomcat/17/jcxu11r2d2_log4j.log grep-l-P'\x00'/var/log/tomcat/17/jcxu11r2d2_log4j.log ll/proc/121203/fd/| grep jcxu11r2d2_log4j.log ll/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(已删除)

空字符是由于来自进程的缓冲写入造成的

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