로그 회전이 작동하지 않습니다

로그 회전이 작동하지 않습니다

Tomcat 서버의 catalina.out 로그 파일에 대해 일일 로그 회전을 설정하려고 하는데 작동하지 않습니다. 회전된 로그 파일이 생성되는 것을 보지 못했습니다.
문제를 해결하기 위해 달렸습니다.logrotate -d /etc/logrotate.conf다음과 같은 결과를 얻었습니다.

rotating pattern: /usr/local/tomcat/logs/catalina.out  5242880 bytes (7 rotations)
empty log files are rotated, old logs are removed
considering log /usr/local/tomcat/logs/catalina.out
  log needs rotating
rotating log /usr/local/tomcat/logs/catalina.out, log->rotateCount is 7
dateext suffix '-20151223'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
copying /usr/local/tomcat/logs/catalina.out to /usr/local/tomcat/logs/catalina.out-20151223
truncating /usr/local/tomcat/logs/catalina.out
compressing log with: /bin/gzip 

모든 것이 괜찮아 보이고 오류도 없습니다. 그러나 결과가 없습니다.

[root@gec logrotate.d]# ls -lrth /usr/local/tomcat/logs/cata*
-rw-r--r-- 1 root root  398 Dec  4 17:48 /usr/local/tomcat/logs/catalina.2015-12-04.log
-rw-r--r-- 1 root root 109M Dec 23 17:21 /usr/local/tomcat/logs/catalina.out 

내 거/etc/logrotate.conf:

daily

rotate 7

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d 

내 거/etc/logrotate.d/tomcat:

/usr/local/tomcat/logs/catalina.out {
    copytruncate
    daily
    rotate 7
    compress
    missingok
    size 5M
}  

뭐가 문제 야?

고쳐 쓰다:

흥미롭게도 달리는 중logrotate -f /etc/logrotate.conf회전된 gzip 파일을 생성하세요!

[root@gec logrotate.d]# ls -lrth /usr/local/tomcat/logs/cata*
-rw-r--r-- 1 root root  398 Dec  4 17:48 /usr/local/tomcat/logs/catalina.2015-12-04.log
-rw-r--r-- 1 root root 1.1M Dec 23 17:26 /usr/local/tomcat/logs/catalina.out-20151223.gz
-rw-r--r-- 1 root root 109K Dec 23 17:27 /usr/local/tomcat/logs/catalina.out

하지만 일일 크론 작업이 작동하는지 어떻게 알 수 있나요?

답변1

logrotate -d /etc/logrotate.conf인수를 사용하여 실행합니다 -d.

매개변수 -d는 디버그 모드, 즉 "모의 실행"이라고 말할 수 있습니다. 로그 회전이 효과적인 경우에만 정보를 제공하지만 로그를 회전하지는 않습니다.

logrotate -f-f이는 매개변수가 logrotate를 강제 실행하기 위해 logrotate를 지정하기 때문에 작동합니다.

매뉴얼에서 인용로그 회전:

  • -d, --디버그

    디버그 모드를 켜고 -v를 암시합니다. 디버그 모드에서는 로그 또는 logrotate 상태 파일이 변경되지 않습니다.

  • -f, --force는 이것이 필요하지 않다고 생각하더라도 강제로 회전하도록 logrotate에 지시합니다. 이는
    logrotate 구성 파일에 새 항목을 추가한 후나 이전 로그 파일을 수동으로 삭제한 경우
    새 파일이 생성되고 로깅이
    올바르게 계속되므로 유용한 경우가 있습니다.

logrotate -d /etc/logrotate.conf제공된 출력에서 ​​로그가 회전되고 압축될 것임을 나타내는 경우 logrotate는 구성 파일을 반복할 때 로그를 확실히 회전합니다.

답변2

이 질문에 중복된 것으로 알려진 또 다른 질문이 있지만 실제로는 매우 다른 답변이 있습니다.

이 질문에 대한 대답은 Tomcat이 사용자 "루트"로 실행되는 경우에만 작동합니다. 이는 보안이 좋지 않은 관행입니다. 모범 사례로서 Tomcat이 사용자 tomcat:tomcat으로 실행 중인 경우 catalina.out 파일도 tomcat:tomcat의 소유가 됩니다. 이 경우 logrotate는 catalina.out을 회전하지 않습니다.

이 문제를 해결하려면 logrotate 구성에서 사용자 및 그룹 이름을 지정해야 합니다. 따라서 이 경우 /etc/logrotate.d/tomcat을 다음과 같이 수정해야 합니다.

/usr/local/tomcat/logs/catalina.out {
    su tomcat tomcat
    copytruncate
    daily
    rotate 7
    compress
    missingok
    size 5M
}

답변3

/etc/logrotate.d/tomcat에서 informempty를 시도하십시오.

관련 정보