Linux는 매일 수정 로그를 수집합니다.
/var/log/
매일 디렉터리에서 로그 파일을 수집하고 싶습니다.
내 스크립트는 디렉터리의 모든 파일을 압축하여 개별적으로 저장합니다. 그런데 문제는 매일 모든 로그 파일을 압축해서 파일 크기가 계속 늘어나는 것입니다.
그렇다면 매일 수정된 파일만(수정된 콘텐츠만) 압축하는 방법은 무엇일까요?
특정 시점 이후에 파일의 수정된 내용을 가져오는 방법. 즉, 처음으로 전체 로그를 수집할 수 있습니다.
다음 날부터 해당 날짜의 로그만 수집해야 합니다.
다음날....
....
답변1
요구 사항을 충족하는 경우 간단한 접근 방식은 매일 교체되는 특정 로그 파일을 갖는 것입니다. 먼저, /etc/(r)syslog.conf
로깅 후 무언가를 삭제하는 규칙이 있는 경우 아마도 상단 근처에 추가합니다 .
*.* -/var/log/daily.log
이것은 받을 것이다모두즉, 다른 로그에 있는 모든 내용이 이 로그에 저장됩니다.
그런 다음 cron을 통해 실행할 수 있는 스크립트가 필요합니다. 사용할 수 있지만 logrotate
이 경우에는 별 의미가 없습니다.
#!/bin/sh
gzip /var/log/daily.log
# Do whatever with the gzipped file
touch /var/log/daily.log
kill -s HUP `pidof syslogd` # see below
마지막 단계는 syslogd를 다시 시작하여 새로 다시 열도록 하는 것입니다 /var/log/daily.log
. 그렇지 않으면 나중에 아무것도 볼 수 없습니다. rsyslog를 사용하는 경우 대신 rsyslog를 사용하세요 pidof rsyslogd
. pidof
어떤 것을 먼저 테스트해 볼지.
마지막으로 /etc/crontab
:
0 0 * * * root /path/to/rotationscript
저는 매일 자정에 이것을 합니다.
답변2
사용을 고려해 보셨나요?로그 회전?
Logrotate는 예약된 간격으로 로그 파일을 회전하는 유틸리티입니다. 설치가 완료되면 아래 표시된 섹션을 사용하여 구성합니다.
/var/log/*.log /var/log/auth /var/log/messages {
daily
rotate 5
copytruncate
compress
dateext
}
패키지 관리자는 설치 시 이미 이를 추가했어야 하므로 /etc/cron.daily
다른 작업을 수행할 필요가 없습니다.
이렇게 하면 다음과 같은 로그가 생성됩니다 /var/log/auth.20140420.gz
. 그것들을 수집하고 싶다면 파일을 찾기만 하면 됩니다 .gz
.
중요 사항:
내 예에서는 의도적으로 이렇게 하지 않았습니다 /var/log/*
. 원래 질문에서는 모든 로그를 회전하고 싶다고 했지만 말입니다 /var/log
. 이는 일부 내용 /var/log
(예: utmp
및 wtmp
)이 일반 로그 파일이 아니므로 순환되어서는 안 되기 때문입니다.
로그를 회전하는 방법에는 두 가지가 있습니다. 로그 이름을 바꾼 다음 이를 작성한 프로그램에 로그 파일을 다시 열도록 지시하거나, 로그 파일의 내용을 새 이름으로 복사한 다음 원본 파일을 잘라낼 수 있습니다.
이동 방법이 더 좋지만 일부 응용 프로그램에는 로그를 다시 열도록 알릴 방법이 없으므로 복사/잘라내기가 더 안전합니다.
이 copytruncate
옵션은 이 동작을 제어합니다. 이동 방법을 사용하려면 해당 방법을 제거하고 섹션에 넣으십시오 postrotate
(맨 페이지 참조).