由於HP-UX 少了很多工具,所以以前自己寫了一個 Log 壓縮的 script,用參數方式執行,如果是HP-UX,date指令需要另外找可用的版本,HP-UX內建的無法加減日期
看到以前寫的 script,現在寫法又略有不同,以為自己 script 寫得很熟了,其實還是有再精進的空間~
使用方式:
log_archive.sh /LogPath/LogFileName /DestPath [CleanrOption]
CleanOption = yes | no (default) ## 如果參數有加yes,會清除過舊的壓縮檔
Support file name prefix:
yyMMDD = 081231 (Today)
YYYYMMDD = 20081231 (Today)
yyMML1D = 081230 (Yesterday)
YYYYMML1D = 20081230 (Yesterday)"
展開..
####################################################
#
# Zip nohup.out or others log file
#
# 2008.04.10 - Winson Lee
#
#
Usage: ./Archive.sh /SOURCE_PATH/FILE
/DEST_PATH
###################################################
###############################
## Auto delete old zip file
## Type: {String) "yes" or "no"
###############################
AUTOCLEAN_ENABLE="$3"
##############################
# Who many file did you save?
# Type: (Int) "5" "7" "10"
##############################
SAVE_FILE=30
###################################
# If Destation folder didn't exist
# Create folder?
# Type: "yes" or "no"
###################################
AUTOCREATE_DEST_FOLDER=yes
############################
# Set cmd `date` location
############################
DATE_BIN="/root/bin/date"
if [ ! -x "$DATE_BIN" ]; then
DATE_BIN=`which date`
SYSTEM_DATE=YES
fi
#######################################
# Function: Convert string to
upcase
#######################################
CONV(){
echo "$1" |tr [a-z] [A-Z]
}
##############
## Start Work
##############
## Usage message
USAGE=" Usage: $0 /LogPath/LogFile /DestPath [CleanrOption]
CleanOption = yes | no (default)
Support file name prefix:
yyMMDD = 081231 (Today)
YYYYMMDD = 20081231 (Today)
yyMML1D = 081230 (Yesterday)
YYYYMML1D = 20081230 (Yesterday)"
## Check file name & path var
if [ -z "$1" ] || [ -z "$2" ]; then
echo "$USAGE"
exit 1
elif [ ! -d "$2" ]; then
if [ `CONV $AUTOCREATE_DEST_FOLDER` = "YES" ]; then
mkdir -p "$2"
else
echo "** Script abort! /DestPath not a folder! **"
echo "$USAGE"
exit 1
fi
fi
SOURCE_PATH="$1"
DEST_PATH="$2"
LOG_PATH=`dirname $SOURCE_PATH`
LOG_FILE_ORG=`basename $SOURCE_PATH`
echo "$LOG_FILE_ORG" |grep -e MMDD -e [yY][yY]MM -e HHMM > /dev/null
if [ $? -eq 0 ]; then
DATE_FLAG=YES
yyMMDD=`$DATE_BIN +%y%m%d`
YYYYMMDD=`$DATE_BIN +%Y%m%d`
MMDD=`$DATE_BIN +%m%d`
## HP-UX "date" command can't support option "-d -1day"
if [ "$SYSTEM_DATE" = "YES" ] && [ `uname` = "HP-UX" ]; then
LOG_FILE=`echo $LOG_FILE_ORG |sed -e "s/YYYYMMDD/$YYYYMMDD/g" -e "s/yyMMDD/$yyMMDD/g" -e "s/MMDD/$MMDD/g"`
else
yyMML1D=`$DATE_BIN +%y%m%d -d -1day`
YYYYMML1D=`$DATE_BIN +%Y%m%d -d -1day`
YYYYMML2D=`$DATE_BIN +%Y%m%d -d -1day`
LOG_FILE=`echo $LOG_FILE_ORG |sed -e "s/YYYYMMDD/$YYYYMMDD/g" -e "s/YYYYMML1D/$YYYYMML1D/g" -e "s/YYYYMML2D/$YYYYMML2D/g" -e "s/yyMMDD/$yyMMDD/g" -e "s/MMDD/$MMDD/g" -e "s/yyMML1D/$yyMML1D/g"`
fi
unset yyMMDD
unset YYYYMMDD
unset yyMML1D
unset YYYYMML1D
unset YYYYMML2D
unset MMDD
else
DATE_STRING=`$DATE_BIN +%Y%m%d`
LOG_FILE="$LOG_FILE_ORG"
fi
unset LOG_FILE_ORG
if [ ! -f "$LOG_PATH/$LOG_FILE" ]; then
echo "** Script abort! /LogPath/LogFile maybe is wrong! **"
echo "$USAGE"
exit 1
fi
## Clean archive file
if [ ! -z "$AUTOCLEAN_ENABLE" ]; then
if [ `CONV "$AUTOCLEAN_ENABLE"` = "YES" ] ; then
OLD_FILECOUNT=`ls $DEST_PATH/$LOG_FILE*.gz 2> /dev/null |wc -l`
if [ $OLD_FILECOUNT -gt $SAVE_FILE ]; then
RM_NUM=`expr $OLD_FILECOUNT - $SAVE_FILE`
RM_LIST=`ls $DEST_PATH/$LOG_FILE.*.gz |tail -n $RM_NUM`
for I in $RM_LIST ; do
echo "rm $I"
done
fi
fi
fi
if [ "$DATE_FLAG" = "YES" ]; then
if [ "$LOG_PATH" != "$DEST_PATH" ]; then
mv $LOG_PATH/$LOG_FILE $DEST_PATH/$LOG_FILE
fi
gzip -9 -f $DEST_PATH/$LOG_FILE
else
cp $LOG_PATH/$LOG_FILE $DEST_PATH/$LOG_FILE.$DATE_STRING
echo > $LOG_PATH/$LOG_FILE
gzip -9 -f $DEST_PATH/$LOG_FILE.$DATE_STRING
fi
