로그를 회전할 때 Apache 다시 로드를 방지하는 방법은 무엇입니까?

로그를 회전할 때 Apache 다시 로드를 방지하는 방법은 무엇입니까?

나는 logrotate를 사용하여 Apache 액세스 로그, 오류 로그를 회전하고 로그를 다시 작성합니다. 내 구성 파일은 다음과 같습니다.

/apache/*log {
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
    lastaction
     /bin/apache reload
    endscript
}

내 문제는 회전이 발생할 때마다 Apache가 방금 회전된 로그 파일에 아무 것도 쓰지 않기 때문에 Apache를 다시 로드해야 한다는 것입니다. logrotate가 회전할 때마다 Apache가 다시 로드되는 것을 방지할 수 있는 방법이 있습니까?

답변1

아파치가 다시 로드해야 하는 이유는 일단 파일을 열면 파일 핸들을 얻고 해당 파일 핸들에 계속 쓰기 때문입니다. 파일을 이동할 때 이 내용이 표시되지 않고 동일한 핸들에 계속 기록됩니다. 다시 로드하면 파일이 다시 열리고 새 핸들이 생성됩니다.

다시 로드하지 않으려면 파일을 이동하는 대신 파일을 복사하고 이전 파일을 지울 수 있습니다. 이 방법으로 Apache는 동일한 파일 핸들에 계속 쓸 수 있습니다. 다음과 같이 logrotate 구성 파일에 "copytruncate" 옵션을 추가하면 됩니다.

/apache/*log {
    copytruncate
    compress
    dateext
    rotate 365
    size=+300M
    olddir /log/old/apache
    notifempty
    missingok
}

답변2

사용하시길 추천드려요http://cronolog.org/

이것이 내가 사용하는 방법입니다:

CustomLog     "|/usr/local/sbin/cronolog -S /var/log/httpd/t3.CCC.eu-access_log -P /var/log/httpd/t3.CCC.eu-access_log.prev /var/log/httpd/t3.CCC.eu-%Y.log" combined

관련 정보