태그 Archives: 중복실행방지

bash 스크립트의 실행 속도(간격) 한계

bash 로 작성된 스크립트의 경우 anacron 혹은 crond 에 의존하여 작동을 한다.

때문에 지정 할 수 있는 최소 시간은 1분이다.

즉 1분에 1회만 실행이 가능하다.

 

필요에 따라 5초 혹은 10초 단위 마다 재 실행 이 가능한 경우가 발생했다. (push 메세지 전송이라든가..)

 

이 한계를 넘기 위해 아래와 같이 작성하여 지정된 $TERM 동안 sleep 을 하고 excute-job 펑션을 재실행 하도록 작성 한다.

1~6 값을 지정함에 따라 알맞은 $TERM을 sleep 하고 재 실행 하게 된다.

쉘 스크립트의 중복실행 방지를 위해 PID 를 생성.

쉘을 단순 명령어 실행 코드로 짤수 있어서 나같은 초보자들도 쉽게 짤수 있는 프로그래밍

언어이도. 또한 서버 관리를 위해 필수 적으로 익혀야 하기도 하고..

 

그러다보니 양산되는 문제가 짜버린 쉘스크립트 코드가 너무 쉽게 만들어져 버리다 보니까.

중복실행이 되면 안되는 쉘스크립트가 중복실행이 되버릴 경우 심하면 서버 다운까지 간다.

예를 들면 백업이라던가.. awstat 체크 로직이라던가. 등등..

그렇다고 while 로 loop 로 너무 많은 쉘을 돌리는것도 문제이긴 하다.

 

그래서 쉘 스크립트를 싱행하기 전에 PID 파일을 생성하고 실행이 되도록 하고.

pid 파일이 있고 현재 프로세스가 실행중이라면 “이미 실행중’ 메세지가 나오도록 하고

pid만 덩그러니 존재 할경우 기존 pid를 삭제하고 실행 되도록 코드를 짜 보았다.

pid 파일은 해당 쉘의 위치와 동일 선상에 생성 되고 삭제되도록 되어 있다 ‘ㅅ’a

 

ps. 2016-07-21 실행된 pid가 너무 짧을 경우 프로세스 exist 체크에서 다른 프로세스를 검출 하는 경우가 나와서 살짝 업데이트를 했습니다.(4째줄..)


ps2. 2020-02-13 기존 스크립트 코드를 단순화 하고 trap 설정을 통해 상단 선언만 되도록 변경 했습니다.(아래)