it-source

날짜 스탬프 파일을 정리하려면 Logrotate

criticalcode 2023. 3. 12. 10:55
반응형

날짜 스탬프 파일을 정리하려면 Logrotate

현재 Cron에서 만든 Oracle Recovery 로그 파일을 정리하는 방법을 찾고 있습니다.

현재 Oracle 스탠바이 복구 프로세스는 다음 명령을 사용하여 15분마다 Cron에 의해 호출됩니다.

0,15,30,45 * * * * /data/tier2/scripts/recover_standby.sh SID >> /data/tier2/scripts/logs/recover_standby_SID_`date +\%d\%m\%y`.log 2>&1

그러면 다음과 같은 파일이 생성됩니다.

$ ls -l /data/tier2/scripts/logs/
total 0
-rw-r--r-- 1 oracle oinstall 0 Feb  1 23:45 recover_standby_SID_010213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  2 23:45 recover_standby_SID_020213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  3 23:45 recover_standby_SID_030213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  4 23:45 recover_standby_SID_040213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  5 23:45 recover_standby_SID_050213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  6 23:45 recover_standby_SID_060213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  7 23:45 recover_standby_SID_070213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  8 23:45 recover_standby_SID_080213.log
-rw-r--r-- 1 oracle oinstall 0 Feb  9 23:45 recover_standby_SID_090213.log
-rw-r--r-- 1 oracle oinstall 0 Feb 10 23:45 recover_standby_SID_100213.log
-rw-r--r-- 1 oracle oinstall 0 Feb 11 23:45 recover_standby_SID_110213.log
-rw-r--r-- 1 oracle oinstall 0 Feb 12 23:45 recover_standby_SID_120213.log

기본적으로 x일보다 오래된 파일을 삭제하고 싶습니다.로그로테이트는...에 최적이라고 생각했습니다.

다음 구성 파일을 사용하여 logrotate를 구성했습니다.

/data/tier2/scripts/logs/recover_standby_*.log {
    daily
    dateext
    dateformat %d%m%Y
    maxage 7
    missingok
}

원하는 결과를 얻기 위해 제가 놓치고 있는 것이 있나요?

Crontab 로그 파일에서 날짜를 삭제한 후 logrotate를 통해 해당 파일을 회전시킬 수 있지만 로그 파일 내의 날짜는 로그가 생성된 날짜를 반영하지 않습니다.020313에서의 로그로트 기동 및 파일 회전으로 인해 010313에서의 복구는 날짜 020313의 파일에 저장됩니다.

다른 생각 있나요?답변해주시면 감사하겠습니다.

안부 전해요

개빈

Logrotate는 사전 정렬된 순환 로그 파일 이름 목록 순서 및 파일 사용 기간(파일의 마지막 수정 시간 사용)에 따라 파일을 삭제합니다.

  • rotate는 최대 회전 파일 수입니다.순환 로그 파일의 수가 많을 경우 이름이 사전 정렬되고 가장 작은 로그 파일은 제거됩니다.

  • maxage는 회전 로그 파일을 삭제하는 다른 기준을 정의합니다.지정된 일수보다 오래된 순환 로그 파일은 제거됩니다.날짜는 파일 이름이 아니라 파일의 마지막 수정 시간부터 감지됩니다.

  • date format을 사용하면 회전된 파일의 날짜 형식을 지정할 수 있습니다.맨 페이지 메모: 형식은 어휘적으로 올바른 정렬이 되어야 한다.

  • dateyesterday를 사용하면 로그 파일 이름에 하루 전의 날짜를 사용할 수 있습니다.

하는 파일 7하려면 , 「일수」를 설정할 .rotate.maxage파일이 매일 생성 및 순환되는 경우.

예를 들어 14일간 로그 생성이 이루어지지 않는 경우 회전 로그 파일 수는 그대로 유지됩니다(7).

maxage는, 항상 너무 오래된 파일을 삭제해, 「프로덕트 미작성」시나리오의 상황을 개선합니다.로그가 7일 동안 생성되지 않으면 순환 로그 파일이 존재하지 않습니다.

하면 안 요.dateformatOP가 나타내듯이 사전 정렬이 불가능하기 때문입니다.dateformat로 인해 다른 회전 로그 파일이 삭제될 수 있습니다.

힌트: 명령줄에서 logrotate를 실행합니다.-d테스트 실행 옵션: logrotate가 어떤 기능을 수행하지만 실제로는 아무 것도 수행하지 않습니다. 다음 '하다'를 사용해서 '을.-v(자세히) 끝난 일이 원하는 것임을 확인할 수 있습니다.

해결책: cron에 의해 작성된 클린 로그

컨셉은 다음과 같습니다.

및을 설정하지만 default cron을 사용할 때는 standard file names when default cron을 합니다.dateext

/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log

너무 오래된 로그 파일을 제거하는 경우에만 logrotate 사용

  • 하지 않는 파일을 로 합니다./data/tier2/scripts/logs/recover_standby_SID.log
  • missingok
  • 설정하다rotate보관하는 로그 파일의 수를 커버할 수 있을 만큼 충분히 높음(하루 1개의 "오류" 로그 파일이 있는 경우 최소 7개, 999와 같이 안전하게 매우 높게 설정할 수 있음)
  • 설정하다maxage마지막 수정 시간이 7일보다 긴 파일이 삭제됩니다.
  • dateext는 로테이션된 것처럼 보이는 오래된 파일을 검색하기 위해서만 사용됩니다.

Logrotate 구성 파일은 다음과 같습니다.

data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 9999
    maxage 7
    dateext
}

해결책: 1일 1회 Logrotate로 직접 회전

작성되는지는 또는 으로 파일에 /data/tier2/scripts/logs/recover_standby_SID.log

컨셉은 다음과 같습니다.

  • 을 하루에 한 번 logrotate
  • 하는 경우/data/tier2/scripts/logs/recover_standby_SID.log
  • daily1회 1일 1회 회전을 요?crondaily)
  • rotate는 7(또는 그 이상의 수치)로 설정할 필요가 있습니다.
  • maxage7(일)로
  • dateextdefault date
  • dateyesterday회전된 파일의 날짜 접미사를 하루 뒤로 되돌리는 데 사용됩니다.
  • missingok순환할 새 콘텐츠가 없는 경우에도 오래된 파일을 삭제합니다.

Logrotate 구성은 다음과 같습니다.

data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 7
    maxage 7
    dateext
    dateyesterday
}

조금 할 .copytruncate외부 프로세스에 의해 소스 로그 파일이 생성되는 방법 및 회전 동작에 대한 반응과 관련된 기타 유사한 옵션입니다.

하시면 됩니다.find명령어를 사용하여 작업을 쉽게 수행할 수 있습니다. 모든 것이 됩니다.7 Daysit .crontab 야간 "displayed " " " :

$ cd /data/tier2/scripts/logs/    
$ /usr/bin/find . -mtime +7 -name "*.log" -print -delete

또는 더 나은 방법

$ /usr/bin/find /data/tier2/scripts/logs/ -mtime +7 -name "*.log" -print -delete;

(갱신) 옵션은 다음과 같습니다.

  • Satish가 대답한 대로 logrotate를 포기하고 find 스크립트를 cron에 넣습니다.
  • logrotate를 사용하여 검색 스크립트를 postrotate 명령어에 넣을 수도 있습니다.

처음에는 로그와 일치하도록 날짜 형식을 변경하는 것이 효과가 있을 것으로 생각했지만, 리드 나빙거가 지적한 대로 날짜 형식은 로그로트레이트와 호환되지 않습니다.최근 로그로토레이트를 삭제하고 싶은 Java 회전 로그도 동일하게 설정하려고 했습니다.아래 구성을 시도했지만 계속 모든 로그를 삭제하려고 했습니다.

/opt/jboss/log/server.log.* {
    missingok
    rotate 0
    daily
    maxage 30
}

결국 저는 Satish가 제안한 것, 즉 cron에서 rm 스크립트를 사용한 단순한 검색만 구현하게 되었습니다.

(평판 부족이라고 코멘트할 수 없음)

저도 비슷한 문제가 있었어요.어느 모로 보나 logrotate는 데이터 스탬프가 내장된 파일 이름에는 사용할 수 없습니다.

, 나는 아마 '하다', '하다', '하다', '하다', '하다', '로 갈 이다.find jobcron job.cron " " " 입니다.

나만의 이유로 logrotate를 사용하고 싶었고, 결국 https://stackoverflow.com/a/23108631라는 방법을 찾았습니다.

기본적으로 이것은 cron 작업을 logrotate 파일에 캡슐화하는 방법입니다.가장 예쁘거나 효율적이진 않지만 말했듯이, 나름의 이유가 있었어.

@하도록 할 수.@Jan Vlcinsky는 logrotate를 합니다.냥냥사사사사사사dateyesterday정확한 날짜를 잡으려고요

또는 직접 날짜를 입력하고 싶을 경우 날짜를 지정하지 않고 이름을 'aim'하면 날짜가 있는 이름이 지워집니다.

그러나 로그 파일이 없는 경우 logrotate는 날짜가 있는 파일을 정리하지 않습니다.

그러나 빈 로그 파일이 있을 준비가 되어 있다면 작동시킬 수 있습니다.

예를 들어 /var/log/mylog 파일을 정리합니다.7일 후 yyymmdd.log,touch /var/log/mylogfile.log로그로테이트

/var/log/mylogfile.log{매일 일어나는회전 7최대 7날짜 확장자date format을 지정합니다.%Y%m%d확장자 .log비어 있는 경우만들다}

이 엔트리와 mylogfile.log의 존재를 조합하면 logrotate를 트리거하여 오래된 파일이 logrotate에 의해 생성된 것처럼 정리됩니다.

daily,rotate ★★★maxage오래된 로그 파일은 7일 후에 삭제됩니다(또는 7개의 오래된 로그 파일 중 빠른 것이라도).

dateext,dateformat ★★★extensionlogrotate와 합니다.

★★★★★★★★★★★★★★★★★.ifempty ★★★create빈 파일이 계속 있는지 확인합니다.이치노

테스트에 대한 또 다른 힌트는 /var/lib/logrotate.status를 편집하여 '마지막 회전' 날짜를 재설정하도록 준비하십시오. 그렇지 않으면 logrotate가 아무런 도움이 되지 않습니다.

참고로, 오래된 질문인 것은 알지만, 당신에게 효과가 없는 이유는 당신의 날짜 형식이 사전 정렬이 불가능하기 때문입니다.manpage부터:

   dateformat format_string
          Specify the extension for dateext using the notation similar to strftime(3)  function.  Only
          %Y  %m  %d  and %s specifiers are allowed.  The default value is -%Y%m%d. Note that also the
          character separating log name from the extension is part of the dateformat string. The  sys-
          tem  clock must be set past Sep 9th 2001 for %s to work correctly.  Note that the datestamps
          generated by this format must be lexically sortable (i.e., first the year,  then  the  month
          then  the  day.  e.g.,  2001/12/01 is ok, but 01/12/2001 is not, since 01/11/2002 would sort
          lower while it is later).  This is because when using the rotate option, logrotate sorts all
          rotated filenames to find out which logfiles are older and should be removed.

해결책은 연월일로 변경하거나 외부 프로세스를 호출하여 청소를 수행하는 것입니다.

언급URL : https://stackoverflow.com/questions/14858752/logrotate-to-clean-up-date-stamped-files

반응형