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로 생성됩니다.
'시스템 > 시스템운영' 카테고리의 다른 글
mysql replication 마스터 단절없이 구성 (0) | 2019.04.07 |
---|---|
만료일 알람 스크립트 (0) | 2018.12.14 |
sendmail 운영 시 메일서버가 계속 차단되는 문제해결 (0) | 2018.10.12 |