답변:
내 경험상 logrotate는 훌륭합니다. 매우 유연하며 대부분의 소프트웨어와 잘 작동합니다.
그러나 그것에는 몇 가지 문제가 있으며 cronolog는 주로 웹 로그 회전 기능이므로 logrotate + apache에 대한 경험을 적어 두었습니다.
logrotate를 할 때, logrotate가 access.log의 이름을 access.log.1로 바꾸더라도, 아파치가 inode에 쓸 때 access.log.1에 계속 쓰는 것처럼 아파치에게 로그가 회전하고 있음을 알려야합니다. 파일 이름을 바꾸더라도 inode 번호에는 영향을 미치지 않습니다.
데비안 에칭 (그리고 아마도 다른 많은 배포판)에서 logrotate는 아파치 로그를 회전시키는 데 사용됩니다. 이제 apache는 아파치 자식 프로세스가 기존 연결 서비스를 마치면 종료하고, 구성을 다시 읽은 다음 새 자식 프로세스를 생성하여 새 로그 파일에 쓰기 시작 하도록 조언 하는 정상적인 재시작 을 제공합니다. 회전).
이것은 훌륭한 솔루션처럼 들리지만, 우아한 재시작은 항상 특정 조건 (예 : 과부하)에서 작동하지는 않으므로 데비안 개발자는 아파치 logrotate 구성에서 정상적인 재시작 대신 아파치 재시작을 사용하기로 결정했습니다. 불행히도 이로 인해 모든 연결이 한 번에 끊어 지므로로드가 많은 사이트에는 매우 나쁩니다. 또한 아파치 재시작으로 인해 아파치 중지 및 시작과 같은 문제가 발생할 수 있습니다 (일부로드 상황에서도). 자세한 내용은 아래 버그 링크를 참조하십시오.
결론은 logrotate는 훌륭하지만 특정 프로그램의 특정 문제로 이어질 수 있다는 것입니다. 나는 cronolog에 대한 경험이 많지 않지만 파이프를 통해 로그를 작성하므로 로그 파일을 회전 할 때 아파치 다시로드가 필요하지 않으므로 기본적으로 위에서 설명한 모든 것을 해결합니다.
관련 logrotate / apache 데비안 버그 :
나는 cronolog를 선호하지만, 정말로 선호되는 것은 아닙니다.
cron이 시작한 위치를 logrotate하고 회전이 발생 해야하는 이유로 시스템이 다운되면 로그 파일이 회전하지 않습니다.
또한 로그 파일을 오랫동안 유지하기 때문에 로그 파일에 날짜 (% Y % m.combined.access.log)가있는 것이 좋습니다. 대부분의 시스템에서 기본적으로 apache logrotate는 파일 이름을 access.log, access.log.1 등으로 지정합니다. logrotate와 함께 로그 파일에서 날짜를 사용하는 것이 가능할 수도 있지만 마지막으로 보았던 방법을 알 수 없었습니다.
logrotate 만 사용했습니다. 데비안이 기본적으로 사용하는 것이므로 불만이 없습니다.
나는 거의 독점적으로 cronolog
이상을 사용 합니다 logrotate
.
logrotate
데비안과 함께 제공되며 메일 서버 로그와 같은 시스템 서비스에서 계속 작동 할 수 있습니다. 그러나 Apache 및 lighttpd
로그 파일의 경우 모두 cronolog
입니다.
내가 사용하는 이유 중 하나는 cronolog
모든 구성이 웹 서버 구성의 로그 파일 줄에서 발생하기 때문입니다.
예를 들어 lighttpd
구성 파일에서 다음을 넣을 수 있습니다.
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"
그리고 다른 구성없이 매주 새로운 로그 파일을 얻습니다. 또는 창의력을 발휘하고 다음과 같은 작업을 수행 할 수 있습니다.
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"
요일별로 트래픽을 보여주는 로그 파일을 얻습니다. 예를 들어 모든 일요일, 화요일마다.
더 좋은 점은 서버가 일정 시간 동안 다운 되어도 재시작시 올바른 로그 파일이 사용된다는 것입니다.