最近新系统上线,运行一个月后发现系统日志占用空间很大,数据库中流水表数据也达到了上千万条,所以编写该shell脚本用来定时清理日志和数据库临时数据。我们的系统应用日志是往一个日志文件中不停写入,不会按日期自动生成新日志文件
脚本dayend.sh内容如下
#!/bin/bash
cmd=zip
bt=zip
#cmd="tar cvzf"
#bt=tar.gz
dt=`date '+%Y%m%d'`
#数据库用户名密码
DBUSER=admin
DBPASS=admin
LOG_NAME=app.log
LOG_PATH=/home/admin/app/log
LOG_FILE=${LOG_PATH}/${LOG_NAME}
BAK_PATH=${LOG_PATH}
BAK_NAME=${LOG_NAME}.${dt}.${bt}
BAK_FILE=${BAK_PATH}/${BAK_NAME}
if [ ! -d ${LOG_PATH} ]; then
echo "${LOG_PATH} not exist..."
exit -1
fi
if [ ! -f ${LOG_FILE} ]; then
echo "${LOG_FILE} not exist..."
exit -1
fi
echo "清理交易日志开始..."
#打包日志
${cmd} ${LOG_FILE} ${BAK_FILE}
#清空日志cat /dev/null > ${LOG_FILE}
#删除三天前的日志压缩包
find ${BAK_PATH} -name "${LOG_NAME}*${bt}" -mtime +3 | xargs rm -rf
echo "清理交易日志结束..."
echo "清理流水表数据开始..."
sqlplus -s $DBUSER/$DBPASS <<EOF
set echo off
set feedback off
delete from sys_trans_h where (SYSDATE-TO_DATE(SUBSTR(trantime,1,8), 'YYYYMMDD'))>60;
insert into sys_trans_h (select * from sys_trans where (SYSDATE-TO_DATE(SUBSTR(trantime,1,8), 'YYYYMMDD'))>3);
delete from sys_trans where (SYSDATE-TO_DATE(SUBSTR(trantime,1,8), 'YYYYMMDD'))>3;
commit;
quit
EOF
echo "清理流水表数据完成..."
脚本比较简单,回到家里后手打的,并不是测试通过的版本,可能会有错误