Bash 脚本根据文件大小分割日志

Bash 脚本根据文件大小分割日志

我正在编写一个 .bash 脚本,该脚本启动 Java 程序,将系统输出记录到“输出文件”,然后追加将出于历史目的的日志结果保存到“存档”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,这将压缩数据,并且该数据将进入 split,当大小达到 2Gb 时,它将分割输出。

相关内容