logrotate가 파일을 닫기 전에 파일을 압축하는 이유

logrotate가 파일을 닫기 전에 파일을 압축하는 이유

mysql 출력을 회전시키기 위해 logrotate를 사용하고 있습니다. cron이 logrotate를 실행할 때 다음 내용이 포함된 이메일을 자주 받습니다.

error: Compressing program wrote following message to stderr when compressing log /var/log/mysql/mysqld.err-20150408:
gzip: stdin: file size changed while zipping

logrotate가 파일을 이동하고 gzip을 호출한 후에도 파일이 여전히 열려 있고 mysql이 파일에 쓰고 있음을 보여줍니다. 이것은 내 mysql logrotate 구성입니다.

/var/log/mysql/mysql.err /var/log/mysql/mysql.log /var/log/mysql/mysqld.err {
monthly
create 660 mysql mysql
notifempty
size 5M
sharedscripts
missingok
postrotate
[ -f /var/run/mysqld/mysqld.pid ] && /bin/kill -HUP `cat /var/run/mysqld/mysqld.pid`
endscript
}

이것은 Gentoo의 mysql 패키지와 함께 제공되는 수정되지 않은 파일이므로 뭔가 문제가 있는 것으로 의심됩니다. 다른 로그의 회전에는 문제가 없습니다.

무슨 일이 일어날 지 아이디어가 있습니까?

답변1

gzip 오류 메시지는 무슨 일이 일어나고 있는지 거의 알려줍니다. 압축 중에 파일이 기록되고 있습니다(이 경우 MySQL에 의해). 매뉴얼 페이지에서 delaycompress(with )를 사용해 보세요 .compress

지연된 압축

이전 로그 파일의 압축을 다음 주기로 연기합니다. 이는 압축과 함께만 작동합니다. 일부 프로그램이 로그 파일을 닫도록 지시할 수 없어 한동안 이전 로그 파일에 계속 쓸 수 있는 경우에 사용할 수 있습니다.

관련 정보