production.log
[2019-02-11 10:18:18] GET /
[2019-02-11 11:18:19] POST blavadasdasdgd
...
... <--- A lot of in between logs and other data
...
[2019-02-12 11:18:20] INFO ::HTTPServer#start: pid=21378 port=4567
[12/Mar/2019:11:18:25 +0200] "GET / HTTP/1.1" 404 458 0.0086
[12/Mar/2019:11:18:26 EET] "GET / HTTP/1.1" 404 458 - -> /
[12/Mar/2019:11:18:27 +0200] "GET /" 200 18893 0.0020
[2019-03-12 11:18:28] GET /
[2019-03-12 12:18:29] POST blablabla
...
... <--- A lot of in between logs and other data
...
[13/Mar/2019:11:18:30 +0200] "GET / HTTP/1.1" 404 458 0.0086
[13/Mar/2019:11:18:31 EET] "GET / HTTP/1.1" 404 458 - -> /
[13/Mar/2019:11:18:32 +0200] "GET /" 200 18893 0.0020
...
... <--- A lot of in between logs and other data
...
[2019-03-14 11:19:18] GET /
파일의 내용은 가짜입니다(그러나 타임스탬프의 순서는 정확합니다)나이가 많은도착하다최신)
나는 nohup을 통해 실행되고 모든 것을 다음과 같은 파일로 출력하는 웹 서버를 가지고 있습니다.production.log
약(+10GB)의 데이터와 정보가 여기에 기록되고 있으며 많은 최신 로그와 데이터를 유지하기 위해 어떤 방식으로든 잘라내고 이전 데이터는 삭제하고 싶습니다. 그래서 내 대략적인 추측은 마지막 30,000줄을 가져와서 다음과 같은 새 파일로 출력하는 것입니다.production.log.1
그런 다음 다시 이동하여 교체하십시오.production.log
예:
tail -30000 production.log > production.log.1 && mv production.log.1 production.log
이제 시도해봐도 tail -f production.log
아무 것도 출력되지 않습니다.새로운웹 서버에서 가져왔지만 파일을 교체하기 전의 마지막 타임스탬프 로그만 표시됩니다. 웹 서버가 쓰기를 중지합니다.
다른 파일에 쓰지 않고 이 작업을 수행하는 더 좋고 좋은 방법이 있습니까? 웹 서버에서 사이트로 2>&1 출력을 유지하면서 사이트의 이전 데이터를 삭제해야 합니다.
답변1
확실하게 하다추가의파일의 출력, 즉 use >>
and not 입니다 >
.
다음으로 "복사 및 자르기"를 사용하여 로그를 보존할 수 있습니다.
cp production.log production.log.1 && cp /dev/null production.log
복사 명령이 완료되고 로그 파일 자르기를 수행하는 데 약간의 시간이 있으므로 일부 로그가 손실될 수 있지만 이는 피할 수 없습니다.
이 유틸리티에는 logrotate
이를 수행하기 위한 특별한 지침이 있습니다: copytruncate
.
단순히 리디렉션하는 대신 추가를 사용하는 요점은 그렇지 않으면 로그 파일에 쓰는 프로그램이 쓰기 오프셋을 기억할 수 있다는 것입니다. 따라서 예를 들어 로그 파일 크기가 2MB이고 파일을 자르고 프로그램이 다시 쓰는 경우 결국 2MB의 빈 블록을 포함하는 희소 로그 파일을 생성한 다음 다시 기록하게 됩니다.
답변2
stderr 또는 최소한 stdout에 기록하고 파이프의 쓰기 끝으로 stdout/error가 있는지 확인하고 파이프의 읽기 끝에서는 엄격한 크기 캡, 자동 회전, 회전 가능 -on을 유지하는 도구를 실행하십시오. -demand, 로그 파일이 지정된 디렉터리에 설정됩니다.
./기록할 내용 2>&1 |자전거 로그/
logrotate
귀하에게 제공할 로그 항목이 손실되지 않습니다 . 그리고 로그 기록기가 새 출력 파일로 전환되도록 하기 위해 서버를 전혀 건드릴 필요가 없습니다.
이러한 도구에는 다음이 포함됩니다.
- 댄 번스타인의
multilog
~에서데몬 도구, 또는 Dan Bernstein의multilog
~에서DJB웨어, 또는 브루스 건터의multilog
~에서daemontools-앙코르또는 Adam Sampsonmultilog
의함대 - 로랑 베르코
s6-log
~에서s6 - 게릿 펩의
svlogd
~에서달리다 - 웨인 마샬의
tinylog
~에서범인 - 내 거
cyclog
~에서간식
추가 읽기
- 조나단 데보인 폴라드(2016).이번 세기에는 logrotate나 newsyslog를 사용하지 마세요.. 자주 주어지는 답변입니다.
- 조나단 데보인 폴라드(2016). "기록". 스낵 가이드. 소프트웨어.
- 조나단 데보인 폴라드(2015). "기록".데몬 도구 계열. 자주 주어지는 답변입니다.
- https://unix.stackexchange.com/a/326166/5132