로그 로테이션 및 파일 열기


21

logrotate는 열린 파일을 어떻게 처리합니까? 프로세스가 열린 회전 파일을 로그 회전 할 수 있습니까?

답변:


7

Rory가 설명한대로 logrotate의 신호를 받아들이지 않는 응용 프로그램에는 몇 가지 방법을 사용합니다.

  1. copytruncate 옵션 사용
  2. 회전 후 명령문을 추가하여 서비스를 다시 시작하십시오.

사용할 파일의 결정은 로그 파일의 크기와 연속 로그의 필요성에 따라 다릅니다. 그것은 당신 자신의 위험 분석이 될 것입니다. 그러나 예를 들어, 실제로는 copytruncate를 사용해야하는 특정 로그에서 회전 후 다시 시작을 사용합니다. 그러나 파일은 종종 몇 개의 공연이며 사본은 밤마다 1 초 또는 2 초를 잃는 것이 바람직 할만큼 시간이 오래 걸릴 수 있습니다.


너무 늦어서 미안하지만,이 문제를 찾는 다른 사람들에게 시간을 절약 할 수 있다고 생각합니다. 이 문제를 해결하기 위해 다른 접근법을 살펴보십시오. unix.stackexchange.com/a/122942/189725
Victor

17

다음을 원할 수도 있지만 주제에 대한 모든 사람의 전문 지식에 여전히 관심이 있습니다.

copytruncate
              Truncate  the original log file to zero size in place after cre‐
              ating a copy, instead of moving the old log file and  optionally
              creating  a new one. 

1
"cp something.log something.log.1; :> something.log"를 수행하는 것과 같으므로 파일은 비워 지지만 파일 핸들은 중단되지 않습니다. 문제는이 명령 사이의 시간, 당신은 일부 로그의 라인 느슨한 수
반경

5

logrotate는 프로세스에 올바른 신호를 보내서 로그 파일을 다시 열도록 지시합니다. 그것은 아파치 또는 mysql과 같은 것들을 위해 즉시 작동합니다.

아파치에 대한 postrotate 스크립트에서 이것을 볼 수 있습니다. 자체 데몬이 있고 logrotate와 함께 작동하려면 특정 신호를 수신하고 로그 파일을 다시 열어야합니다.

프로그램을 변경할 수 없다면 데몬에 자동으로 로그를 플러시 할 수있는 방법이 있는지 확인할 수 있습니다. 또는 서버를 중지시키는 사전 회전과 다시 시작하는 사후 회전을 추가하십시오.


좋아, 개발자가 그렇게 할 수는 없다고 생각하지만 표준이 무엇인지 아는 것이 좋다 :-)
Kyle Brandt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.