test.sh
#!/bin/bash
echo "Hello World"
test2.sh
#!/bin/bash
while true
do
sh test.sh >> /script_logs/test.log &
done
로그 파일 크기를 제어하기 위해 logrotate를 구현하고 싶습니다. 그래서 상황이 위와 같은 경우 logrotate를 구현하는 방법은 무엇입니까?
test.sh
#!/bin/bash
echo "Hello World"
test2.sh
#!/bin/bash
while true
do
sh test.sh >> /script_logs/test.log &
done
로그 파일 크기를 제어하기 위해 logrotate를 구현하고 싶습니다. 그래서 상황이 위와 같은 경우 logrotate를 구현하는 방법은 무엇입니까?
답변:
#!/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
문제를 일으킬 수 있으므로 "&"을 (를) 제거했습니다.
cp
과 mv
로그 파일이 일정 수준에 도달하면, 나는 로그 파일을 제거 할 수 있습니다, 그것은? 내 요구 사항은 (,, 그 로그 파일을 제거하고 새로운 파일을 생성하기 위해 같은 이름으로 새 로그 파일을 원할 것입니다 )
>>
로그 파일에 추가하는 데 사용해야 하며, >
반복해서 덮어 씁니다.
>
이 나타납니다 tail: test.log: file truncated Hello World!
...을 사용하면 >>
올바른 로그 메시지가 표시되지만 파일 크기가 증가합니다. 조건을 점검하는 조건이 없습니다 ... ;-(
방법 사용에 대한 savelog
?
데비안과 RH에서 사용할 수 있으며 내가 아는 다른 모든 Linux 배포판에서도 사용할 수 있습니다. / bin / sh 쉘 스크립트이므로 다른 유닉스에서도 실행해야합니다.
예를 들어 test.log
실행할 것을 쓰기 전에 savelog -n -c 7 test.log
. 이것은 비어 있지 않은 7 가지 test.log 버전 7 개를 유지합니다. 기본적으로 회전 된 로그를 압축하지만 (을 사용하여 비활성화 할 수 있음 -l
).
필요한 경우 크기를 확인하고 특정 크기를 초과하는 경우 test.log
에만 크기를 확인할 수 있습니다 savelog
.
/usr/bin/savelog
스크립트에서 shell 스크립트를 찾을 수 있습니다 . sources.debian.net/src/debianutils/4.7
savelog
파일 이름이 바뀌지 만 완료하기 전에 이전 파일을 압축하는 데 시간이 오래 걸린다는 것입니다. 한편 .0 로그는 이미 다음 날 항목을 가져옵니다. 이상적으로는 로그 회전과 로그를 다시 열도록 프로세스에 신호를 보내는 시간이 최소화되어야합니다. savelog
이 때문에 압축 기능을 비활성화 합니다.
나는 이번 주말에 logrotee를 썼다 . @JdeBP의 훌륭한 답변을multilog
읽었다면 아마 아닐 것 입니다.
나는 가볍고 출력 덩어리를 bzip2로 압축하는 데 중점을 두었습니다.
verbosecommand | logrotee \
--compress "bzip2 {}" --compress-suffix .bz2 \
/var/log/verbosecommand.log
그러나 아직 수행하고 테스트해야 할 것이 많이 있습니다.