개발을 하다 보면 지속적으로 반복해서 처리해야 하는 작업을 만날 때가 있다. 이런 경우 데몬으로 만들어서 터미널이 종료되더라도 항상 백그라운드에서 돌아가도록 하면 된다. 조금 더 정성을 기울인다면 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
는 중지다.
|
|
이 외에도 데몬툴즈에는 유용한 도구 및 기능들이 다수 포함되어 있으므로 다양하게 활용 가능하다.