스크립트(프로세스) 항상 띄워놓기

2014-01-07

개발을 하다 보면 지속적으로 반복해서 처리해야 하는 작업을 만날 때가 있다. 이런 경우 데몬으로 만들어서 터미널이 종료되더라도 항상 백그라운드에서 돌아가도록 하면 된다. 조금 더 정성을 기울인다면 ntsysv나 update-rc.d 같은 도구를 사용해 부팅시 자동으로 실행되도록 한다.

하지만 단순한 스크립트 작업을 데몬으로 만드는 것은 배보다 배꼽이 더 클뿐더러 단지 반복적으로만 실행하면 되는 경우가 많기 때문에 1분마다 crond를 통해 실행하도록 하는 방법도 자주 사용한다. 다만 이 경우 중복 실행을 막기 위해 잠금 파일(lockfile)을 통해 기존에 실행 중인 같은 스크립트가 있는지 확인하는 절차가 필요하다. 이 방법의 아쉬운 점은 실행 시간이 1분 단위이기 때문에 그 이하로 빈번히 동작해야 하는 스크립트에는 적용하기 어렵다는 단점있다.

이런 단점을 해결하고 좀 더 손쉽게 스크립트(또는 프로세스)를 항상 실행 할 수 있도록 하는데 도움이 되는 도구들이 있다. 여기서는 널리 쓰이는 데몬툴즈(daemontools)를 이용해 스크립트를 항상 실행하는 방법을 정리 해 보았다.

우선 데몬툴즈를 설치해야 한다. 설치 환경은 우분투 12.04를 기준으로 했다.

그 다음은 데몬툴즈의 서비스(service) 디렉토리를 살펴보고 run 스크립트를 찾아 실행시켜주는 svscan 서비스를 띄운다.

svscan 서비스가 동작하기 시작하면 /etc/service 디렉토리 안에 ‘이름/run’ 스크립트 파일을 찾아 supervise 도구를 이용해서 항시 run 스크립트가 실행되도록 자동으로 처리한다.

데몬툴즈의 기본 디렉토리는 /etc/service 이므로, 테스트를 위해 이 안에 foobar 디렉토리를 만든다.

그 다음 run.new 파일을 다음 내용으로 생성한다.

파일을 생성했으면 실행권한을 부여하고, run으로 이름을 변경한다. 이렇게 하는 이유는 supervise에 의해 언제 run 스크립트가 실행될지 모르므로 편집 중간에 실행되는 것을 방지하기 위해서다.

run으로 이름을 바꾸면 바로 supervise가 run 파일을 실행하는 것을 확인 할 수 있다.

이렇게 실행한 run 스크립트는 svstat 명령을 이용해 동작 중인 것을 확인 할 수 있다. svstat을 사용하면 다른 관리 스크립트에서 실행 여부를 모니터링 하는데 유용하다.

만약 실행 중인 스크립트를 중지시키거나 시작 또는 재시작 하고 싶은 경우 svc 명령을 사용하면 된다. -u는 시작, -d는 중지다.

이 외에도 데몬툴즈에는 유용한 도구 및 기능들이 다수 포함되어 있으므로 다양하게 활용 가능하다.