#!/bin/sh
##########################################
#author lemonzone
#删除目录下N天前的所有日志,目录支持多个,逐个目录进行日志删除,删除日志符合*log.*
#第一个参数是目录的列表
#第二个参数是保留日志的天数,支持小时数(2小时:"2/24")
#使用说明,定时任务(命令:crontab -e)中增加定时清日志的脚本:
#15 3 * * * /bin/bash /data/operation_bin/remove_log.sh '/data/logs /usr/local/apache-tomcat-8.0.35' 15
#每小时清除2小时之前的日志,保留最近两小时内数据
#0 */2 * * * /bin/bash /data/operation_bin/remove_log.sh '/data/logs' 2/24
############################################
#删除日志路径,多个空格分割
LOG_DIRS="$1"
#保留日志的天数
DAYS="$2"
HOURS=""
#默认日志路径
readonly DEFAULT_LOG_DIRS="/data/logs"
#默认日志保留天数
readonly DEFAULT_DAYS="2"
readonly LOG_FILE='/tmp/remove.log'
#获取当前时间
now(){
date "+%Y-%m-%d %H:%M:%S"
}
#记录日志info
log_info(){
echo "[INFO] [$(now)]:$*" >> ${LOG_FILE}
}
#记录错误日志error
log_error(){
echo "[ERROR] [$(now)]:$*" >> ${LOG_FILE}
}
#记录错误日志error
log_warn(){
echo "[WARN] [$(now)]:$*" >> ${LOG_FILE}
}
init(){
#每月10号清理日志
if test "X$(date +%d)" = "X10";then
cat /dev/null > ${LOG_FILE}
fi
if test -z "${LOG_DIRS}";then
LOG_DIRS="${DEFAULT_LOG_DIRS}"
fi
if test -z "${DAYS}";then
DAYS="${DEFAULT_DAYS}"
fi
#查看是否是小时
if test $(echo "${DAYS}"|grep "/24$" -c) -ge 1;then
HOURS="${DAYS%%/*}"
fi
}
main(){
init
local time_ago=$(($DEFAULT_DAYS*24*60))
if test -n "${HOURS}";then
#小时转化为分钟
time_ago=$(($HOURS*60))
else
#天数转换为分钟
time_ago=$(($DAYS*24*60))
fi
for log_dir in ${LOG_DIRS}
do
log_info "Removing $log_dir $DAYS days ago's log file"
if test ! -d "${log_dir}";then
log_warn "Invalid path:$log_dir"
continue
fi
#删除time_ago之前日志 *log.*类型的日志
find ${log_dir} -mmin +${time_ago} -name "*log.*" -a -type f -exec rm -rf {} \;
log_info "Removed $log_dir $DAYS days ago's log file"
done
}
#启动
main
转载于:https://my.oschina.net/lemonzone2010/blog/1634477