logrotate создает нулевые байты в файле журнала после поворота файла журнала Python

У меня есть следующий файл logrotate.conf:

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

И у меня есть следующий сценарий bash, который выполняет мой питон:

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

Как я могу решить эту проблему после того, как logrotate запустит свой create file.log с нулевыми байтами в начале?


person ArmoArmo    schedule 06.07.2020    source источник


Ответы (2)


Вы можете использовать postrotate для удаления нулевого значения из вашего журнала.

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

}
person Pranjal Doshi    schedule 17.11.2020

если ваш файл обрабатывается процессом Команда 'sed' нарушит запись fs для исходного файла

и ваш процесс запишет в удаленный файл !!

ll -i /var/log/tomcat/17/jcxu11r2d2_log4j.log 33554504 -rwxrwxr-x 1 usrcot17 кроватка 15957988 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 11 мая 02:09 210 - ›/var/log/tomcat/17/jcxu11r2d2_log4j.log lrwx ------ 1 usrcot17 cot 64 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 11 мая 13:57 /var/log/tomcat/17/jcxu11r2d2_log4j.log grep -l -P '\ x00' / var / log / tomcat / tomcat / /jcxu11r2d2_log4j.log ll / proc / 121203 / fd / | grep jcxu11r2d2_log4j.log ll / proc / 121203 / fd / | grep удален lrwx ------ 1 usrcot17 cot 64 11 мая 02:09 210 - ›/ var / log / tomcat / 17 / sedzP6J1h (удален) lrwx ------ 1 usrcot17 cot 64 11 мая 02:09 75 - ›/ var / log / tomcat / 17 / sedzP6J1h (удалено)

нулевые символы связаны с буферизованной записью вашего процесса https://access.redhat.com/solutions/135193

Единственное хорошее решение, которое я нашел на данный момент, - разрешить ротацию журналов в инициативе прикладного процесса.

person wizoot    schedule 11.05.2021