#!/bin/bash#定義日志所在分區當前空間所占比例數(去掉%)。grep -w表示精準匹配,只匹配"/"這個分區
LOG_PARTITION=$(`which df` -h|awk '{print $5,$6}'|grep -w "/"|cut -d" " -f1|awk -F"%" '{print $1}')
#定義一周前的日期,用于日志分區空間超過設定的閾值后保留的份數(這里保留一周的日志)
KEEP_DATE=`date -d '-7 days' +%Y%m%d`
#定義日志路徑
LOG_DIR=/opt/log/kevin
#定義日志備份路徑(即當日志分區空間超過閾值后,將日志轉移到該處。這里就轉移到了本地home分區下,也可以轉移到別的機器或遠程存儲設備上)
LOG_BACK_DIR=/home/log/kevin#確保日志備份路徑存在,如果不存在,則創建該路徑。
if [ ! -d ${LOG_BACK_DIR} ];then`which mkdir` -p ${LOG_BACK_DIR}
elseecho "${LOG_BACK_DIR} is exist" >/dev/null 2>&1
fi#當日志分區當前空間超過90%時執行的動作
if [ ${LOG_PARTITION} -ge 90 ];then#切換到日志路徑下cd ${LOG_DIR}#截取日志文件中的日期,比如stepweb_20190915.log日志文件,則截取20190915for LOG_DATE in $(ls -l ${LOG_DIR}|awk '{print $9}'|cut -d"_" -f2|awk -F"." '{print $1}')do#當日志文件中截取的日期是一周之前的日志時執行的動作if [ ${LOG_DATE} -lt ${KEEP_DATE} ];then#打包,轉移,刪除#注意這里tar使用-P參數,因為tar默認為相對路徑,使用絕對路徑的話會報錯"Removing leading `/’ from member names",使用-P參數就解決了該問題`which tar` -zvPcf ${LOG_DIR}/stepweb_${LOG_DATE}.log.tar.gz ${LOG_DIR}/stepweb_${LOG_DATE}.logmv ${LOG_DIR}/stepweb_${LOG_DATE}.log.tar.gz ${LOG_BACK_DIR}/rm -rf ${LOG_DIR}/stepweb_${LOG_DATE}.logelseecho "keep stepweb_${LOG_DATE}.log" >/dev/null 2>&1fidone
elseecho "${LOG_PARTITION} is available" >/dev/null 2>&1
fi#!/usr/bin/sh
#根據系統/服務/日志保留天數三個參數壓縮日志
#usage: sh clearlog.sh sysname appname keepdays
sysName=$1
appName=$2
keepDay=$3
logDir=/var/log/${sysName}/${appName}
logFile=${appName}.log
cd ${logDir}
find ./ -name "${logFile}.*[0-9][0-9]" -mtime +${keepDay} -exec gzip {} \;