소프트웨어를 작성 중인데 프로세스가 logrotate 등으로부터 SIGHUP 신호를 받으면 로그 파일을 다시 로드하고 싶습니다. 문제는 logrotate가 회전된 로그 파일 압축을 시작하기 전에 애플리케이션이 얼마나 많은 시간을 사용할 수 있느냐는 것입니다.
내가 찾은 맨페이지와 모든 참조에는 응용 프로그램이 로그를 "즉시" 다시 로드해야 한다고 명시되어 있지만 예를 들어 이 작업이 1밀리초 안에 완료되어야 하는지, 아니면 1초 안에 완료되어야 하는지는 언급되어 있지 않습니다.
답변1
단지 안전을 위해서: 전혀 그렇지 않습니다.
Logrotate는 postrotate 명령이 완료되면 로그 파일이 더 이상 기록되지 않는다고 가정합니다. "로그 파일을 닫는 데 시간이 걸릴 수 있음"을 처리하는 방법에는 두 가지가 있습니다.
- logrotate 옵션은
delaycompress
다음까지 압축 단계를 연기합니다.다음로그 회전 호출. 이렇게 하면 다음 logrotate 실행만큼 오랜 시간이 걸릴 수 있습니다(이렇게 하는 것은 매우 나쁜 생각이지만). - 데몬에게 로그 파일을 닫았다가 다시 열도록 명령줄 도구를 작성하여 이 명령이 수행되는지 확인할 수 있습니다.아니요데몬이 모든 로그 파일이 닫혔음을 확인할 때까지 종료합니다(해당되지는 않지만 파일이 다시 열릴 때까지 기다릴 필요는 없습니다). 그런 다음
postrotate
logrotate 섹션에서 이 명령줄 도구를 사용할 수 있습니다 .