회 전당 많은 로그 파일을 다른 하위 디렉토리로 회전하려면 어떻게해야합니까?


12

나는 로그 파일이 많은 디렉토리를 가지고 있으며 매일 회전하고 싶습니다. 조직적인 목적으로 회전 된 로그를 날짜별로 이름이 지정된 다른 디렉토리 (또는 하위 디렉토리)로 옮기고 마지막 주 로그를 유지하려고합니다.

logrotate를 사용하여 파일을 제자리로 회전하거나 olddir지시문을 사용하여 하나의 다른 디렉토리로 이동 하여이 대부분을 달성 할 수는 있지만 회전마다 개별 하위 디렉토리를 만드는 솔루션을 찾는 데 문제가 있습니다. 어떻게하면 되나요? :

Logs to rotate: /var/log/example/*

Desired target directories (keeping a week):
    /var/log/example/20121006/*
    [ ... ]
    /var/log/example/20121012/*

답변:


9

postrotate지시문 에서 외부 스크립트를 호출 할 수 있어야합니다 .

postrotate
  /path/to/your.sh
endscript

해당 스크립트가 이동하도록합니다. 예 :

#!/bin/bash

newdir=/var/log/example/`date +%Y%m%d`

mkdir $newdir
mv /var/log/example.1.gz $newdir

find /var/log/example -mindepth 1 -maxdepth 1 -mtime +7 \
  -type d -print0 | xargs -0 rm -rf

그러나 dateext지시문을 사용하는 것이 더 쉬울 수 있습니다 . 이를 통해 회전 된 파일에는 타임 스탬프가 추가됩니다 (다른 디렉토리로 이동하지는 않더라도).

logrotate(8)두 지시문에 대한 자세한 내용 을 참조하십시오 .


postrotate트릭 을 할 것 같습니다 . 내가 추가해야 할 유일한 것은 특정 수를 초과하거나 특정 날짜보다 오래된 이전 디렉토리를 제거하는 것입니다.
Dave Forgac

1
업데이트 된 답변을 참조하십시오. 이 find | xargs명령은 /var/log/example7 일 전에 마지막으로 수정 된 경우의 모든 직접 하위 디렉토리를 삭제해야합니다 .
Ansgar Wiechers

1

olddir구성 파일에서 사용할 수있는 지시문이 있습니다.

설명서에서 :

olddir
로그는 회전을 위해 디렉토리로 이동합니다. 디렉토리는 회전중인 로그 파일과 동일한 물리적 장치에 있어야하며 절대 경로 이름이 지정되지 않은 경우 로그 파일을 보유하는 디렉토리에 상대적인 것으로 간주됩니다. 이 옵션을 사용하면 모든 이전 버전의 로그가 디렉토리에있게됩니다. 이 옵션은이 옵션으로 대체 될 수 있습니다 noolddir.

참조 : https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.