쉘 스크립트에서 logrotate를 구현하는 방법

쉘 스크립트에서 logrotate를 구현하는 방법

테스트 파일

#!/bin/bash
echo "Hello World"

test2.sh

#!/bin/bash
while true
do
    sh test.sh >> /script_logs/test.log &
done

logrotate를 구현하여 로그 파일의 크기를 조절하고 싶은데 위와 같은 상황이라면 어떻게 logrotate를 구현해야 할까요?

답변1

사용해 보는 것은 어떨까요 savelog?

이는 데비안과 RH 그리고 제가 아는 거의 모든 다른 Linux 배포판에서 작동합니다. 이는 /bin/sh 쉘 스크립트이므로 다른 유닉스에서도 실행되어야 합니다.

test.log예를 들어, run 을 쓰기 전에 savelog -n -c 7 test.log. 그러면 test.log의 비어 있지 않은 최신 버전 7개가 유지됩니다. 기본적으로 회전된 로그를 압축합니다(그러나 이것을 사용하여 비활성화할 수 있습니다 -l).

필요한 경우 크기를 확인 test.log하고 savelog특정 크기를 초과하는 경우에만 확인할 수 있습니다.

답변2

#!/bin/bash 
touch /script_logs/test.log
MaxFileSize=2048
while true
do
     sh test.sh >> /script_logs/test.log
#Get size in bytes** 
    file_size=`du -b /script_logs/test.log | tr -s '\t' ' ' | cut -d' ' -f1`
    if [ $file_size -gt $MaxFileSize ];then   
        timestamp=`date +%s`
        mv /script_logs/test.log /script_logs/test.log.$timestamp
        touch /script_logs/test.log
    fi

done

문제가 발생할 수 있으므로 "&"를 제거했습니다.

답변3

나는 썼다로그로티이번 주말. @JdeBP의 글을 읽었다면 아마도 그렇게 하지 않았을 것입니다.에 대한 훌륭한 답변multilog.

저는 가볍고 출력 청크를 bzip2할 수 있다는 점에 중점을 두었습니다. 예를 들면 다음과 같습니다.

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

그러나 아직 수행해야 할 작업과 테스트할 작업이 많이 남아 있습니다.

답변4

아직 코멘트를 추가할 수 없기 때문에수락된 답변,ㅏ바쁜 상자힌트: 여기에는 플래그 du가 없습니다 .-b

du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1

관련 정보