만 료 된 Tomcat 로그 의 셸 스 크 립 트 자동 삭제

(우호 적 인 알림: 본 고 는 초급 셸 프로 그래 밍 에 속 하고 고 수 는 이 글 을 무시 할 수 있 습 니 다)
    제품 환경 이 실행 되 는 과정 에서 매일 날짜 에 따라 로그 파일 을 절단 합 니 다. 이 로그 파일 들 은 보통 일정 기간 이 지나 면 쓸모 가 없 기 때문에 기한 이 지난 로그 파일 을 정기 적 으로 삭제 해 야 합 니 다.본 고 는 CentOS 의 Tomcat 를 응용 환경 기반 으로 셸 스 크 립 트 를 통 해 만 료 된 Tomcat 로그 파일 을 정기 적 으로 자동 으로 삭제 하여 디스크 공간의 점용 을 줄 이 고 관리자 의 일상 업 무 를 줄 입 니 다.
   1. 셸 스 크 립 트 코드:
#!/bin/bash
#
# filename: clearExpiredTomcatLogs.sh
#
# FUNCTION: clear the expired tomcat log files
#
# -----------------增加 crontab 定时任务
# Add sys schedule:
#     crontab -e
# press "i" enter the Modify mode, and add schedule item in new-line:
# 05 00 * * * /bin/bash /products/dds/clearExpiredTomcatLogs.sh
# press "Esc" key to exit Modify mode, then press "Shift + :" and input "wq", press "Enter" key to exit the crontab
# -----------------

# the base directory for search the existed apache tomcat. 配置包含tomcat目录的路径,该目录或其子孙目录下存在Tomcat目录
SEARCH_DIR=/products/dds/

# the keep days of log-files.[config value range: 2 -- 365] 配置日志保留天数
KEEP_LOGFILE_DAYS=31

# execute log for this shell 配置本脚本的执行日志文件
EXECUTE_LOG_FILE=${SEARCH_DIR}clear-expired-tomcat-logs.log

##
# write execute log 写日志信息到本脚本的执行日志文件中
writelog() {
    if [ ! -f "${EXECUTE_LOG_FILE}" ]; then
        touch ${EXECUTE_LOG_FILE}
    fi
    echo "$1">>${EXECUTE_LOG_FILE}
}

##
# remove expired log files 移除过期的日志文件(此方法为被调用方法);可根据实际需要 在删除前 增加日志备份功能
removeExpiredLogFiles() {
    log_dir=$1
    log_file_prefix_name=$2
    log_file_ext_name=$3

    REMOVED_FILE=1

    LOG_FILE=
    LOG_FILE_NAME=
    CUR_DATE=
    for((i=${KEEP_LOGFILE_DAYS};i<=365;i++));do
        CUR_DATE=$(date +"%Y-%m-%d" --date="-$i day")
        LOG_FILE_NAME=${log_file_prefix_name}${CUR_DATE}${log_file_ext_name}
        LOG_FILE="${log_dir}/${LOG_FILE_NAME}"
        if [ -f "${LOG_FILE}" ]; then
            writelog "        ${LOG_FILE_NAME}"
            rm -f ${LOG_FILE}
            REMOVED_FILE=0
        fi
    done

    if [ ${REMOVED_FILE} -eq 0 ]; then
        writelog ""
    fi

    unset -v log_file_prefix_name log_file_ext_name
    unset -v LOG_FILE LOG_FILE_NAME CUR_DATE

    return ${REMOVED_FILE}
}


##
# remove the tomcat's log files 移除过期的tomcat的日志文件(此方法为被调用方法);如有其他日志文件可增加删除条目
removeExpiredLogFilesForTomcat() {
    log_dir=$1

    # remove log-files that which is out of the keep days.
    removeExpiredLogFiles "${log_dir}" "catalina." ".log"
    a=$?

    removeExpiredLogFiles "${log_dir}" "catalina." ".out"
    b=$?

    removeExpiredLogFiles "${log_dir}" "host-manager." ".log"
    c=$?

    removeExpiredLogFiles "${log_dir}" "manager." ".log"
    d=$?

    removeExpiredLogFiles "${log_dir}" "localhost." ".log"
    e=$?

    if [ ${a} -eq 1 -a ${a} -eq ${b} -a ${a} -eq ${c} -a ${a} -eq ${d} -a ${a} -eq ${e} ]; then
        writelog "        # No expired log file"
        writelog ""
    fi

    unset -v log_dir
}


writelog "#-------------------------------------------------START"
writelog "`date +"%Y-%m-%d %A %H:%M:%S"`"
writelog "keep days for tomcat log files: $KEEP_LOGFILE_DAYS"
writelog "remove the expired tomcat log files in the following directories:"

##
# find the apache-tomcat and remove the expired log files 循环“查找匹配到 apache-tomcat 字样的目录和文件”
for t in `find $SEARCH_DIR -name '*apache-tomcat-*'`
do
    # 判断是否为目录
    if [ -d "${t}/logs" ]; then
        writelog "    ${t}/logs/"
        removeExpiredLogFilesForTomcat "${t}/logs"
    fi
done

writelog "#-------------------------------------------------END"
writelog ""

unset -v SEARCH_DIR KEEP_LOGFILE_DAYS EXECUTE_LOG_FILE
unset -f writelog removeExpiredLogFiles removeExpiredLogFilesForTomcat

   2. 셸 스 크 립 트 의 실행
   스 크 립 트 내용 에서 'crontab 정시 작업 추가' 에 대한 설명 에 따라 시스템 의 정시 작업 으로 추가 할 수 있 습 니 다.명령 행 창 에서 직접 실행 할 수도 있 습 니 다. 예 를 들 어 sh clearExpired TomcatLogs. sh  또는 실행 가능 한 권한 (chmod + x clearExpired TomcatLogs. sh) 을 부여 한 후 실행 합 니 다./clearExpired TomcatLogs. sh
   3. 특별 설명
   셸 스 크 립 트 에 서 는 알 수 없 는 문제 가 발생 하지 않도록 중국어 문자 가 없 도록 해 야 합 니 다.상기 셸 스 크 립 트 의 중국 어 는 관련 내용 만 설명 하기 위해 실제 사용 하 는 스 크 립 트 에는 관련 내용 이 없습니다.
이상 셸 스 크 립 트 는 비교적 간단 해 야 합 니 다. 셸 고 수 는 이 글 을 무시 하거나 개선 제안 이나 의견 을 제시 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기