본문으로 바로가기

crontab 중복실행 방지 스크립트

category 시스템/시스템운영 2018. 10. 9. 12:52

crontab 중복실행 방지 스크립트


시스템환경

CENTOS 7.5

locale ko_KR.UTF-8


시스템을 운영하다보면 crontab에 짧은 간격(5분내) 으로 스크립트를 등록해서 사용할때가 있습니다.


그런데 서버 부하나 정기백업등으로 인해 먼저 실행된 cron 스크립트가 끝나지않고 중복 실행이되어 문제가 발생하는 경우가 가끔 있습니다.


이를 방지하는 bash 스크립트 내용 입니다.


#!/bin/bash


# 변수 초기화

DATE=`date +%Y%m%d`

START_DATE_TIME=`date +%Y-%m-%d-%H:%M:%S`

LOG_DIR='/root/test'



if [ -s "$0.pid" ]

then

  # pid 파일이 생성되어 있으면 fail.log에 로그를 남기고 실행 중지

        echo "$START_DATE_TIME Already $0 is running" >> $LOG_DIR/fail.log

        exit

else

  # pid 파일 생성

        echo $$ > "$0.pid"

        # 실제 실행되는 스크립트 작성

        echo "$START_DATE_TIME CRON START" >> ${LOG_DIR}${LOG_FILE}_${DATE}.log

        # 실행이 중지되면 다음 파일 실행을 위해 pid 파일 삭제

        rm -f "$0.pid"

        END_DATE_TIME=`date +%Y-%m-%d-%H:%M:%S`

        echo "$END_DATE_TIME CRON END" >> ${LOG_DIR}${LOG_FILE}_${DATE}.log

        echo " " >> ${LOG_DIR}${LOG_FILE}_${DATE}.log

fi


참고로 pid 파일은 스크립트 경로내에 파일명.pid로 생성됩니다.