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 명령이 해당 파일의 잠금 상태를 확인해서 실행하는 개념
감사합니다.