만 료 된 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. 특별 설명
셸 스 크 립 트 에 서 는 알 수 없 는 문제 가 발생 하지 않도록 중국어 문자 가 없 도록 해 야 합 니 다.상기 셸 스 크 립 트 의 중국 어 는 관련 내용 만 설명 하기 위해 실제 사용 하 는 스 크 립 트 에는 관련 내용 이 없습니다.
이상 셸 스 크 립 트 는 비교적 간단 해 야 합 니 다. 셸 고 수 는 이 글 을 무시 하거나 개선 제안 이나 의견 을 제시 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
EC2 인스턴스에 Tomcat 설치전제 조건: Amazon 계정이 있어야 합니다. Amazon 계정에 로그인하고 EC2 인스턴스를 시작합니다. 여기에서 프리 티어를 선택했고 Amazon Linux 2를 실행하는 EC2 인스턴스를 시작했습니다. 시작 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.