열려 있고 항상 기록중인 파일 회전


10

로깅 정보를 지속적으로 로그 파일에 쓰는 리눅스 응용 프로그램이 있습니다. /var/log/application.log. 응용 프로그램이 파일을 자동으로 회전시키지 않기 때문에이 로그 파일은 몇 주 안에 기가 바이트 크기에 도달 할 수 있으므로이 파일을 올바르게 회전 할 수 있기를 원합니다

내 주요 관심사는 응용 프로그램에서 항상 열린 파일을 회전하려면 아마도 다음을 수행해야한다는 것입니다.

  1. 파일을 회전 된 형태로 이동 /var/log/application.log -> /var/log/application.log.2013-01-28

  2. 빈을 만듭니다 /var/log/application.log. Obs : 이 시점에서 신청 절차는 여전히/var/log/application.log.2013-01-28

  3. 응용 프로그램 프로세스의 파일 디스크립터를 다시 가리 키도록 변경하십시오. /var/log/application.log

내가 맞습니까? 그렇다면 어떻게해야합니까? (주로 파일 디스크립터 부분 변경)

내가 아닌 경우 올바른 방법은 무엇이며 어떻게해야합니까?


파일을 지우거나 회전해야합니까?
ewwhite

어떤 응용 프로그램? 응용 프로그램은이를 제대로 지원하기 위해 지원을 제공해야합니다. (그렇지 않으면 프로세스에 첨부하고 이전 파일 dup2위에 새 설명자를 추가 한 다음 새 설명자를 닫습니다.)
David Schwartz

흥미로운 awarach Schwartz. 나는 그것이 실제로 작동하는 것을 알고 호기심을 가지고 놀 것입니다. 어쨌든 응용 프로그램은 집안에 있으며 더 일반적인 솔루션을 찾고 있습니다. 나는 kormoc의 답변 btw를 좋아합니다
Bruno

@ewwhite 회전해야하는데 로그 데이터를 잃을 여유가 없습니다
Bruno Polaco

답변:


11

logrotate사용할 설정 작성copytruncate

copytruncate
    Truncate the original log file in place after creating a copy, instead of moving the 
    old log file and optionally creating a new one. It can be used when some program
    cannot be told to close its logfile and thus might continue writing (appending) to
    the previous log file forever. Note that there is a very small time slice between
    copying the file and truncating it, so some logging data might be lost. When this
    option is used, the create option will have no effect, as the old log file stays
    in place.

복사 후 파일을 자르는 것은 데이터 손실 마진이 있어도 매우 영리한 것처럼 보입니다. logrotate 에서이 옵션을 보지 못했습니다. 통찰력에 대한 Thx :)
Bruno Polaco

1

이러한 응용 프로그램의 대부분은와 같은 신호에 응답하며 신호 SIGHUP를 받으면 로그 파일을 닫았다가 다시 엽니 다. 전송할 올바른 신호에 대해서는 응용 프로그램 설명서를 확인하십시오.


그렇지 않은 경우 응용 프로그램을 폴백으로 다시 시작할 수 있습니다. 이것이 syslog가 일반적으로하는 일이며 다른 몇 가지 프로그램입니다.
lsd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.