随着服务器运行时间不断增加,各种日志文件也会不断的增长,虽然硬盘已经是白菜价了,但是如果当你看到你的一个日志文件达到数十G的时候是什么感想?下面的脚本实现了如下功能:
- 自动对日志文件进行分割
- 对分割后的日志文件进行压缩
# 以在阿里云上运行的nginx服务为例 date=`date +%Y-%m-%d_%H-%M-%S` rotatename=/alidata/server/nginx/logs/access.${date}.log logname=/alidata/server/nginx/logs/access.log if [ -f "$rotatename" ] then sleep 1 date=`date +%Y-%m-%d-%H-%M-%S` rotatename=/alidata/server/nginx/logs/access.${date}.log fi mv $logname $rotatename # 告知应用程序重载配置文件(不进行次步骤的话日志会记录到重命名后的文件中), # 不同的应用程序此步骤可能会不一样 kill -USR1 `cat /alidata/server/nginx/logs/nginx.pid` # 等待1s,使重载配置文件生效 sleep 1 # gzip压缩,如果已经有了特别大的日志量,建议先手动使用split命令进行分割, # 然后再分别进行压缩,否则会消耗大量cpu并影响线上业务 gzip $rotatename
在crontab中根据自己需要定时执行此shell即可。
如果再优化一下还可以把以日期为分割标准改为以文件大小为分割标准,此时定时任务的执行频率可以相对频繁一些。