파일 크기에 따라 로그를 분할하는 Bash 스크립트

파일 크기에 따라 로그를 분할하는 Bash 스크립트

Java 프로그램을 시작하고 시스템 출력을 "출력 파일"에 기록하는 .bash 스크립트를 작성 중입니다.추가기록 목적으로 로그 결과를 "Archive" zip에 저장합니다. 내 현재 스크립트는 다음과 같습니다 ...

outfile=/some/log/directory/templog-$(date +%s).log
archive=/some/log/directory/archive.log.gz
java -cp MyJar.jar Logger 2>&1 | tee $outfile | gzip - | cat - >> $archive

내가 하고 싶은 것은 임시 파일의 크기가 2GB에 도달하면 "outfile2", "outfile3" 등과 같은 새 파일을 생성한 다음 모든 작업이 완료되면 결과로 나오는 "outfile"을 모두 "archive"로 압축하는 것입니다. '.gz 파일(또는 별도의 파일로 압축할 수도 있음)

"rotatelogs"와 "logrotate"를 조사하고 있지만 최선의 선택이 무엇인지 알 수 없는 것 같습니다. 저는 Linux 세계의 초보자이므로 도움을 주시면 대단히 감사하겠습니다.

답변1

당신이 할 수 있는 것은 미리 압축하는 대신 logrotate를 통해 압축할 수 있다는 것입니다. 당신은로그 회전파일은 몇 분마다 cron을 통해 트리거될 수 있으며, 크론은 파일 크기를 확인하고 회전하고 압축합니다.

또는 다음을 사용할 수 있습니다.나뉘다주문하다. 이 명령은 크기나 줄 수를 기준으로 파일을 분할할 수 있습니다. 그러면 다음 명령이 제공됩니다.

java -cp MyJar.jar Logger 2>&1 | tee $outfile | gzip | split -m 2048m archive 

tee부터 시작하여 데이터/출력은 gzip으로 이동하여 데이터를 압축하고 해당 데이터는 분할로 이동하여 크기가 2Gb에 도달하면 출력을 분할합니다.

관련 정보