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


12

test.sh

#!/bin/bash
echo "Hello World"

test2.sh

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

로그 파일 크기를 제어하기 위해 logrotate를 구현하고 싶습니다. 그래서 상황이 위와 같은 경우 logrotate를 구현하는 방법은 무엇입니까?

답변:


11
#!/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

문제를 일으킬 수 있으므로 "&"을 (를) 제거했습니다.


@Veerendra 우리는 무한 루프를 실행할 때 루프 내부에 로그를 롤링하는 논리를 넣어야합니다 ..
curious

@Veerendra 우리는 이전 게시물에 오류가 발생했습니다 .. "mv"는 새 파일을 만들지 않지만 요구 사항에 따라 스크립트를 변경할 수 있습니다.
호기심 많은

그래서, 대신 cpmv로그 파일이 일정 수준에 도달하면, 나는 로그 파일을 제거 할 수 있습니다, 그것은? 내 요구 사항은 (,, 그 로그 파일을 제거하고 새로운 파일을 생성하기 위해 같은 이름으로 새 로그 파일을 원할 것입니다 )
Veerendra Kakumanu

>>로그 파일에 추가하는 데 사용해야 하며, >반복해서 덮어 씁니다.
alcik

을 사용하면 ... >이 나타납니다 tail: test.log: file truncated Hello World!...을 사용하면 >>올바른 로그 메시지가 표시되지만 파일 크기가 증가합니다. 조건을 점검하는 조건이 없습니다 ... ;-(
Veerendra Kakumanu

24

방법 사용에 대한 savelog?

데비안과 RH에서 사용할 수 있으며 내가 아는 다른 모든 Linux 배포판에서도 사용할 수 있습니다. / bin / sh 쉘 스크립트이므로 다른 유닉스에서도 실행해야합니다.

예를 들어 test.log실행할 것을 쓰기 전에 savelog -n -c 7 test.log. 이것은 비어 있지 않은 7 가지 test.log 버전 7 개를 유지합니다. 기본적으로 회전 된 로그를 압축하지만 (을 사용하여 비활성화 할 수 있음 -l).

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


어떤 패키지가 AWS Linux에 포함되어 있는지 알고 있습니까? (CentOS와 비슷하다고 생각합니다)? 기본 설치에는 저장 로그가 없습니다. 기본 repos를 사용하여 yum에서 찾을 수 없습니다
jhonkola

RHEL 5에서 savelog를 찾을 수 없습니다. 어떤 저장소에 있어야하는지 알고 있습니까?
Felipe Alvarez

centos 나 rhel5 패키징에 대해서는 전혀 모르지만, 소스/usr/bin/savelog 스크립트에서 shell 스크립트를 찾을 수 있습니다 . sources.debian.net/src/debianutils/4.7
cas

2
savelog내 RHEL / CentOS 5/6 상자를 찾지 못했기 때문에 방금 다운로드 한 후 필요에 따라 잘 작동하는 것 같습니다.
데일 앤더슨

한 가지 단점은 savelog파일 이름이 바뀌지 만 완료하기 전에 이전 파일을 압축하는 데 시간이 오래 걸린다는 것입니다. 한편 .0 로그는 이미 다음 날 항목을 가져옵니다. 이상적으로는 로그 회전과 로그를 다시 열도록 프로세스에 신호를 보내는 시간이 최소화되어야합니다. savelog이 때문에 압축 기능을 비활성화 합니다.
rustyx

2

나는 이번 주말에 logrotee를 썼다 . @JdeBP의 훌륭한 답변을multilog 읽었다면 아마 아닐 것 입니다.

나는 가볍고 출력 덩어리를 bzip2로 압축하는 데 중점을 두었습니다.

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

그러나 아직 수행하고 테스트해야 할 것이 많이 있습니다.


0

허용 된 답변BusyBox 힌트에 아직 주석을 추가 할 수 없으므로 플래그 du가 없습니다 -b.

du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.