우리는 서버에 애플리케이션을 배포했으며 특정 상황에서 애플리케이션은 다음 형식으로 일부 로그를 생성합니다.
process_name.hostname.common_text.log.{error/info/warning}.date.time
이제 이 형식으로 인해 하나의 로그가 아니라 동일한 내용을 포함하는 여러 로그가 있습니다.process_name.hostname.common_text.{오류/정보/경고}일부만, 나머지는 날짜와 시간의 차이로 인해 다릅니다. 그러나 logrotate에 관한 한, 이 모든 것을 별도의 로그로 처리하고 내가 말하면 각 로그의 복사본 1개를 유지합니다.
스핀 1
logrotateconf에서
하지만 제 경우에는 동일한 로그이므로 각 카테고리에서 가장 최근의 1개 로그를 제외하고는 어떤 로그도 유지하고 싶지 않습니다(오류/정보/경고). 나는 무엇을 해야 합니까?
cron에서 매주 실행되는 스크립트를 작성하고 싶습니다. 스크립트는 각 범주(오류/정보/경고) 타임스탬프 사용(ls-ltr) 그런 다음 나머지 로그를 삭제합니다. 하지만 스크립트에 넣으려고 하면 너무 복잡해집니다.
나는 이런 것을 찾고 있습니다.
ls -ltr |grep process_name.hostname.common_text.log.error |head -n -1
ls -ltr |grep process_name.hostname.common_text.log.info |head -n -1
ls -ltr |grep process_name.hostname.common_text.log.warning |head -n -1
위의 3개 명령은 모든 이름을 반환합니다.process_name.hostname.common_text.log.{오류/정보/경고}.date.time로그(가장 최근 로그 제외)
1) 위의 각 명령의 출력을 다음으로 파이프할 수 있습니까?구현하다또는매개변수내가 달릴 수 있도록 같은 줄에무선 주파수반대하다?
2) 더 나은 접근 방식은 무엇입니까? 마찬가지로 process_name에는 2개의 다른 이름이 있으므로 6개 이상의 명령을 실행해야 합니다.
3) 한 줄에 오류, 정보, 경고 등 세 번 grep하는 방법이 있습니까?
답변1
-1
ls 대신 사용하면 -l
파일 이름만 가져오고 이를 rm에 직접 전달할 수 있습니다. 나는 다음과 같은 것을 사용할 것입니다 :
rm $(ls -1tr process_name.hostname.common_text.log.error* | head -n -1) \
$(ls -1tr process_name.hostname.common_text.log.info* | head -n -1) \
$(ls -1tr process_name.hostname.common_text.log.warning* | head -n -1)