定时删除服务器备份文件夹,服务器日期切分文件定时清理与压缩备份shell脚本...

随着服务器运行,业务日志不断增长,之前文章提供的日志器可对业务日志文件进行按天、大小、普通三种模式切分,本脚本是为解决服务器存储压力,对日切分日志文件进行定时清理与压缩存储,需要与crontab结合使用,脚本中提供了crontab脚本,可通过crontab -e进行添加,脚本采用系统自带的tar压缩为zip格式,压缩比率约为原文件1/4,日志文件路径需要对脚本文件FILE_DIR宏进行设置,FILE_DIR_BACK为备份文件路径,DEL_FILE_NUM为任务执行清理自当前时间内的文件,DEL_FILE_RET为保留的最近文件数,脚本运行参数如下:

test   用于测试,产生目标格式的日志文件及压缩文件

clear  用于清理文件

backup  用于备份文件

run    清理文件同时备份文件

crontab脚本如下:

* 10 * * 1 sh /data/web/dsp-gateway/crontab.sh run  > /data/web/dsp-gateway/crontab.txt

#!/bin/bash

#@description 定时任务,以当前系统时间为基准,向前搜索DEL_FILE_NUM个文件,跳过最近DEL_FILE_RET个文件

#* 10 * * 1 sh /data/web/dsp-gateway/crontab.sh run > /data/web/dsp-gateway/crontab.txt

#@author chenbintao

#@data2017-07-1010:220.0.1初稿

#2017-07-1011:310.0.2调试通过

#2017-07-1014:410.0.3增加保留文件压缩及历史压缩文件清理

#2017-07-1017:210.0.4优化清理流程,先进行文件清理,再逐个压缩文件清理原始文件(tar -zcPf注意P参数的位置)

#2017-07-1018:090.0.5增加运行环境检测,及增加备份目录,防止备份文件被flume收集

#2017-07-1018:200.0.6增加提示及版本信息

#2017-07-1019:200.0.7增加运行指令,支持清理与备份分离

#2017-07-1021:010.0.8测试验证通过

#2017-07-1021:310.0.9增加日志打印方法

#

#

VERSION=0.0.9#版本

DEL_FILE_NUM=31#删除文件数(总共的删除文件数)

DEL_FILE_RET=7#保留文件间隔(当前时间多久不被删除)

FILE_DIR=/data/web/dsp-gateway/logs/#文件目录

FILE_DIR_BACK=/data/web/dsp-gateway/logs/backup/#文件目录

FILE_HEAD=(request response)#文件名称

FILE_TAIL=(log)#文件后缀

FILE_TAR=tar#压缩文件后缀

PAR_TEST=test#测试模式参数

PAR_CLEAR=clear#清理文件

PAR_BACKUP=backup#备份文件

PAR_RUN=run#正式运行

#

#

#

#方法集

function ifo(){

echo "=======================================文件清理/备份任务脚本 V${VERSION}($0)======================================="

echo "---0.模式选择(test:生成测试,run:正式运行(清理&备份),clear:清理文件,backup:备份文件)"

echo "---1.生成工具目录"

echo "---2.清理历史文件"

}

function clear(){

echo "2.清理非保留原始/压缩文件"

for((i=${DEL_FILE_RET}+1;i<=${DEL_FILE_NUM};i++));do

#计算时间

file_date=`date -d -${i}day +%F`

#遍历文件头列表

for j in ${FILE_HEAD[@]}; do

#遍历文件后缀列表

for k in ${FILE_TAIL[@]}; do

#组装文件名

file_name=${j}.${k}.${file_date}

#删除原始文件

cd ${FILE_DIR}

if [ ! -f "${FILE_DIR}${file_name}" ]; then

println '不存在文件:'${FILE_DIR}${file_name}

else

println '删除文件:'${FILE_DIR}${file_name}

rm -rf ${FILE_DIR}${file_name}

fi

#删除压缩文件

cd ${FILE_DIR_BACK}

tar_flie_name=${file_name}.${FILE_TAR}

if [ ! -f "${FILE_DIR_BACK}${tar_flie_name}" ]; then

println '不存在文件:'"${FILE_DIR_BACK}${tar_flie_name}"

else

println '删除文件:'"${FILE_DIR_BACK}${tar_flie_name}"

rm -rf "${FILE_DIR_BACK}${tar_flie_name}"

fi

done

done

done

}

function backup(){

echo "3.压缩保留文件并删除原始文件"

for((i=1;i<=${DEL_FILE_RET};i++)); do

#计算时间

file_date=`date -d -${i}day +%F`

#遍历文件头列表

for j in ${FILE_HEAD[@]}; do

#遍历文件后缀列表

for k in ${FILE_TAIL[@]}; do

#组装压缩文件名

file_name=${j}.${FILE_TAIL}.${file_date}

if [ ! -f "${FILE_DIR}${file_name}" ]; then

continue

fi

#生成压缩文件

tar_flie_name=${file_name}.${FILE_TAR}

cd ${FILE_DIR_BACK}

if [ ! -f "${FILE_DIR_BACK}${tar_flie_name}" ]; then

println '压缩文件:'"${FILE_DIR_BACK}${tar_flie_name}"

tar -zcPf "${FILE_DIR_BACK}${tar_flie_name}" ${FILE_DIR}${file_name}

else

println '已存在文件:'"${FILE_DIR_BACK}${tar_flie_name}"

fi

#清理原始文件

rm -rf ${FILE_DIR}${file_name}

println "删除文件:"${FILE_DIR}${file_name}

done

done

done

}

function test(){

echo "1.产生测试文件"

cd ${FILE_DIR}

for((i=1;i<=${DEL_FILE_NUM};i++)); do

#计算时间

file_date=`date -d -${i}day +%F`

#遍历文件头列表

for j in ${FILE_HEAD[@]}; do

#遍历文件后缀列表

for k in ${FILE_TAIL[@]}; do

#组装文件名

cd ${FILE_DIR}

file_name=${j}.${k}.${file_date}

#创建原始文件

touch ${FILE_DIR}${file_name}

#创建压缩文件

tar_flie_name=${file_name}.${FILE_TAR}

cd ${FILE_DIR_BACK}

tar -zcPf "${FILE_DIR_BACK}${tar_flie_name}" ${FILE_DIR}${file_name}

#

println "测试:创建文件 ${FILE_DIR}${file_name} ${FILE_DIR_BACK}${tar_flie_name}"

done

done

done

}

function println(){

echo `date '+%Y-%m-%d %H:%M:%S'`":"$*

}

#############################################################################################

#运行代码

echo "0.运行前准备"

cd ${FILE_DIR}

if [ ! -d "${FILE_DIR}" ]; then

echo "日志目录不存在,退出!"

exit

fi

if [ ! -d "${FILE_DIR_BACK}" ]; then

echo "备份目录不存在,创建!"

mkdir -p ${FILE_DIR_BACK}

fi

ifo

if [ $# -gt 0 ];then

if [ $1 == ${PAR_TEST} ];then

test

exit

elif [ $1 == ${PAR_RUN} ];then

clear

backup

exit

elif [ $1 == ${PAR_CLEAR} ];then

clear

exit

elif [ $1 == ${PAR_BACKUP} ];then

backup

exit

fi

echo "参数错误,退出!"

exit

fi

exit

有疑问加站长微信联系(非本文作者)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值