특정 크기(예: 50MB)에 도달한 후 회전되어야 하는 로그 파일이 있습니다. 회전 후에는 압축해야 하며 회전된 파일 이름에 날짜를 추가해야 합니다. 이제 회전된 파일을 파일 서버에 복사해야 합니다.
이를 위해 작동하지 않는 구성을 작성했습니다.
/var/log/test.log {
compress
missingok
size 50M
rotate 6
create
dateext
postrotate
rsync -avzr /var/log/test.log* REMOTE-HOST:/path/to/directory/
endscript
}
ls /var/log/test.log*
로컬 시스템에서 디렉토리를 실행하면 회전된 파일 test.log-20150211.gz
과 빈 파일을 찾을 수 있습니다 test.log
. REMOTE-HOST에서 회전된 파일의 압축되지 않은 버전 test.log-20150211
과 빈 로그 파일이 발견되었습니다.test.log
제가 걱정되는 것은,
- 압축된 로그 파일이 원격 호스트로 전송되지 않는 이유는 무엇입니까?
- 회전된 파일만 전송하려면 어떻게 해야 하나요?
편집하다:
또한 로그가 교체된 후 서비스가 syslog
중지되었음을 발견했습니다(검사를 실행하여 로깅 프로세스가 중지되었음을 확인 tailf test.log
). 서비스를 다시 시작해야 합니다. service syslog restart
해당 섹션을 계속 추가해야 하나요 postrotate
?
답변1
압축된 로그 파일이 원격 호스트로 전송되지 않는 이유는 무엇입니까?
압축은 거의 마지막에 발생하는 작업이므로 postrotate
이 지점에 도달하기 전에도 여전히 발생합니다. logrotate
다음 예는 매뉴얼 페이지에서 확인할 수 있습니다 postrotate
.
로그 파일이 회전된 후(그러나 이전 버전의 로그가 압축되기 전)
/sbin/killall -HUP syslogd
[from postrotate script] 명령이 실행됩니다.
rsync
cronjob으로 실행하는 것이 좋습니다 .
회전된 파일만 전송하려면 어떻게 해야 하나요?
rsync
원본 파일 이름만 일치시키는 것입니다( 더 *
많은 문자가 없는 파일도 일치하므로) 더 구체적인 소스 이름을 사용하여 일치 항목을 제거합니다.
rsync -avzr /var/log/test.log-* REMOTE-HOST:/path/to/directory/