테스트 파일
#!/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