Server

Delete Shell 작성

끊임없이 개발하는 새럼 2024. 10. 15. 15:57

복호화 코드 내부에 파일 임시 저장 경로가 포함되어 있다.

해당 디렉토리 안에 파일이 점차 쌓일 거고,

성능 저하 문제가 생기거나 용량이 꽉 차 솔루션에 문제가 생길 것 같아

임시 저장 경로 내부의 파일들을 삭제하는 쉘 파일을 이용하였다.

 

#!/bin/sh

HOMEDIR=/home/utils/deleteBatch
DELDIR=/app/temp
SHELL=del_batch.sh
LOGDIR=/logs  # 로그 파일들이 저장될 디렉토리
LOGFILE="${LOGDIR}/del_log" 
Interval=300
Inv_Cnt=0
MAX_LOG_FILES=50  

cd ${HOMEDIR}

# 날짜별 백업 로그 파일 생성 함수
backup_logfile_if_new_day() {
    current_date=$(date '+%Y%m%d')  # 현재 날짜를 YYYYMMDD 형식으로 저장
    last_mod_date=$(date -r ${LOGFILE} '+%Y%m%d' 2>/dev/null)  # 로그 파일 마지막 수정 날짜

    # 로그 파일이 존재하고, 날짜가 변경되었을 때 백업
    if [ -f "${LOGFILE}" ] && [ "${current_date}" != "${last_mod_date}" ]; then
        mv ${LOGFILE} "${LOGDIR}/del_log_${last_mod_date}.log"  # 이전 날짜 형식으로 파일명 변경
    fi
}

# 로그 파일 개수 확인 및 오래된 로그 삭제 함수
manage_log_files() {
    log_count=$(ls ${LOGDIR}/del_log_*.log 2>/dev/null | wc -l)
    if [ ${log_count} -gt ${MAX_LOG_FILES} ]; then
        oldest_log=$(ls -t ${LOGDIR}/del_log_*.log | tail -1)
        rm -f ${oldest_log}  # 가장 오래된 로그 파일 삭제
    fi
}

if [[ $1 = 'start' ]]
then
    echo "----------------------[start]-----------------------" 
    echo "Starting Process Monitoring......[`date +%H:%M:%S`]"

    TimeDay=`date '+%Y%m%d%H%M'`
    echo "Start Time : ${TimeDay}"


    if pgrep -f "${HOMEDIR}/${SHELL} mon" > /dev/null; then
        echo "[Error] Process Monitoring is already running."
        exit 1  
    fi

    ${HOMEDIR}/${SHELL} mon &  
    echo "----------------------------------------------------"
    
elif [[ $1 = 'stop' ]]
then
        echo "----------------------[stop]------------------------"
        PID=`ps -ef | grep "${HOMEDIR}/${SHELL} mon" | grep -v grep | awk '{print $2}'`
        echo ${PID} "Process Monitoring killed......[`date +%H:%M:%S`]"

        kill -9 ${PID}
        echo "----------------------------------------------------"
elif [[ $1 = 'mon' ]]
then
        while [ 1 ]
        do
            backup_logfile_if_new_day 
            manage_log_files 

            if [[ "$Inv_Cnt" ==  '1' ]]
            then
                current_time=`date '+%Y/%m/%d %H:%M:%S'`
                before_count=`ls ${DELDIR} | wc -l`
                
                find ${DELDIR} -type f -amin +5 | xargs rm -f
                
                after_count=`ls ${DELDIR} | wc -l`
                
                echo "!!!System Current Time :: ${current_time}" >> ${LOGFILE}  
                echo "Delete Before Count :: ${before_count}" >> ${LOGFILE}  
                echo "Delete After Count :: ${after_count}" >> ${LOGFILE}  
            fi

            Inv_Cnt=1

            sleep ${Interval}
        done
elif [[ $1 = "status" ]]
then
        echo '-------------------[Status ss_batch Process]---------------------'
        PID=`ps -ef | grep "${HOMEDIR}/${SHELL} mon" | grep -v grep | awk '{print $2}'`
        CNT=`ps -ef | grep "${HOMEDIR}/${SHELL} mon" | grep -v grep | grep -v status | wc -l`
        if [[ $CNT -gt 0 ]]
        then
            echo "Program ${SHELL} is Alive...${CNT}...${PID}"
        else
            echo "Program ${SHELL} is Dead...${CNT}"
        fi
        echo '-----------------------------------------------------------'

elif [[ $1 = 'time' ]]
then
        echo '-------------------[System Time]---------------------'
        echo "System Current Time......[`date '+%Y/%m/%d %H:%M:%S'`] "
        echo '-----------------------------------------------------'

else
        echo "invalid command => del_batch.sh start|stop|status|time"
fi

exit 0

 

* 이미 쉘이 실행되어 있을 경우, exit를 만나도록 수정

* 날짜별로 로그 파일이 나눠지도록 수정

* 로그 파일이 50개 이상이 될 경우 삭제

'Server' 카테고리의 다른 글

CentOS 7.7 에서 db2 설치하기  (0) 2025.04.16
LINUX 환경 변수 설정  (0) 2024.11.25
AIX 에서 db2 script 실행하는 쉘 파일  (0) 2024.08.12
db2 서버에서 실행  (0) 2024.07.16
compile, 실행 쉘  (0) 2024.07.12