Logrotate copytruncate 옵션에 시간이 너무 많이 걸림

Logrotate copytruncate 옵션에 시간이 너무 많이 걸림

저는 crontab을 사용하여 4시간마다 logrotate를 실행합니다. 50G마다 파일을 회전하고 4시간 안에 완료될 것으로 예상하고 싶습니다. 내 거로그 순환 구성다음과 같이:

/log/*/*/*/*.log
{
        size 50G
        copytruncate
        missingok
        notifempty
        nocompress
        postrotate
                dir=${1%/*}
                mv "$1" "$dir"\/"$(basename $1 .1)-$(date +'%Y%m%d_%H%M').1";
        endscript
        lastaction
                find /log -type f -name "*.1" -exec bash -c 'gzip -nc "$1" > "${1:0:-2}.gz"; rm "$1"' _ {} \;
        endscript
}

하지만 내 파일은 GB 단위입니다. 그렇다면 copytruncate 옵션을 사용해도 괜찮을까요? 아니면 다른 대안이 있습니까? 제가 생각할 수 있는 한 가지 해결책은 복사하는 대신 사전 회전 스크립트를 사용하여 파일 이름을 바꾸는 것입니다.

답변1

1) 로그 파일이 너무 큽니다. crontab에 logrotate 항목을 추가하여(5분마다) 더 작고 처리하기 쉽게 만듭니다.
2) copytruncate는 파일을 복사한 다음(50GB는 많음) 파일을 0바이트로 자릅니다(ftruncate). 이 작업은 시간이 걸리며 이 작업을 수행하는 동안 기록이 손실됩니다.
3) 파일을 구문 분석하고 불필요한 정보(예: 필드 설명 - 헤더 생성)를 제거하고 쉼표(또는 기타 표시자)로 구분된 값만 유지하십시오.

최상의 옵션:
- 더 높은 주파수.
- 복사 잘림이 없습니다.
-kill -HUP는 conf 파일의 프로세스를 다시 읽습니다.
- 스핀 1.
- 압축.
- gzip으로 압축된 로그 파일을 안전한 위치로 이동하세요.

관련 정보