logrotate는 어떻게“매일”을 정확하게 처리합니까?


30

내 시스템의 타임 스탬프로 판단하면 logrotate가 cron에 의해 실행될 때 logrotate는 매일 로그 회전을 수행합니다. 그러나 그보다 빨리 실행하면 파일이 회전하지 않습니다. logrotate는 회전 여부를 어떻게 알 수 있습니까? 기록을 유지하거나 타임 스탬프를 사용합니까?

답변:


32

나는 그것이 상태 파일의 내용이라고 믿습니다 /var/lib/logrotate.status. 각 파일에는 마지막으로 회전 한 날짜 인 한 줄이 있습니다. 현재 날짜와 파일의 날짜 사이의 일 수 (매일 1, 매주 7 등)를 고려하여 지정된 파일이 회전해야하는 날짜에 logrotate를 실행하면 파일이 회전됩니다.

logrotate는 실행되는 시간에 신경 쓰지 않는 것 같습니다. 일반적으로 2355에서 실행 되더라도 대신 0130에서 실행하면 매일 표시되고 어제 마지막으로 수행 된 파일이 계속 회전합니다. 그러나 그렇게하면 오늘 날짜가 상태 파일 (회전 된 파일에 대해)에 저장되므로 2355에서 두 번째 실행하면 아무것도하지 않습니다.


1
흠 .. 현재 날짜> 날짜가 다음 /var/lib/logrotate/status과 같은 경우에만 회전합니다 (파일은 제 경우와 같습니다).
Kyle Brandt

2
마지막 실행 후 24 시간이 지나면 아무것도하지 않는다고 생각합니다. 상태 파일의 mtime을 검사하여 해결할 수 있습니다. 하루 종일 결정되고 합법적으로 아무것도 할 수 있으면 파일 내부의 날짜 필드를 기준으로 매일, 매주 등 결정을 내립니다.
MadHatter는

4
글쎄 그 파일의 날짜를 사용하는 것 같습니다. 나는 하루를 상태 파일에 다시 설정하고 그것을 실행 ... 그것은 회전 ..
Kyle Brandt

방금 돌아가서 내 로그 로테이션을 찌르면 내가 틀렸다고 생각하며 위에 쓴 내용이 옳습니다. 상태 파일의 타임 스탬프를보고 오늘 이미 실행되었는지 여부를 결정합니다. 그렇지 않은 경우 상태 파일에서 마지막 회전 날짜를 추출하여 그에 따라 작동합니다. 나는 vi로 logrotate하고 터치 -t를 터치하여 어제 2355에서 마지막으로 실행되었다고 설득했다. 24 시간 미만 이었지만 다시 실행하면 상태가 바뀌고 상태 파일이 그에 따라 업데이트됩니다.
MadHatter는

방금 실행 한 테스트 세트를 고려할 때 현재 이해에 대한 답변을 업데이트했습니다 (일요일부터 munin 로그를 8 가지 방법으로 나눕니다).
MadHatter는

11

logrotate 매뉴얼 페이지에서 :

일반적으로 logrotate는 매일 cron 작업으로 실행됩니다. 해당 로그에 대한 기준이 로그 크기를 기반으로하고 logrotate가 하루에 두 번 이상 실행되지 않거나 -f 또는 -force 옵션이 사용되지 않는 한 하루에 두 번 이상 로그를 수정하지 않습니다.


1
cron.daily가 언제 실행되는지 확인하려면 여기 로 이동 하십시오 .
Trevor Boyd Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.