UNIX-Networking

crontab 명령 중복 실행 방지

빤따스뤽 2024. 5. 30. 10:59

DB 데이터를 삭제하는 어플리케이션을 실행중

데이터가 많아서 1분 정도에 끝날 수 있는 Java어플리케이션을 명령을 작성하고 crontab 을 통해 1분에 한번씩 실행되도록 하는데... 혹시 어플리케이션이 1분 안에 끝나지 않으면 다음프로세스가 실행되면서 예측하지 못하는 결과가 나올 수도 있다.

스프링 스케쥴러를 쓴다면 fixedDelay 같은 옵션으로 종료되어야 실행 하도록 강제 할 수 있는데 crontab는 그렇지가 않다.

해결책으로 /usr/bin/flock 명령을 통해 프로세스 실행시 특정 파일에 락을 걸고 다음 실행시 그 파일의 락이 풀렸는지 여부에 따라 실행여부 판단을 하는 방법이 있다.

예제

* * * * * /usr/bin/flock -n /tmp/원하는명.lockfile /usr/local/command/app.sh

템프러리 폴더에 특정 파일을 만들고 flock 명령이 해당 파일의 잠금 상태를 확인해서 실행하는 개념

 

감사합니다.