Supervisor. 프로세스 관리, 로그 확인

supervisor는 유닉스 계열의 시스템에서 여러 프로세스를 모니터링하고, 제어하는 프로그램이다.

여러 프로젝트를 진행할 때, 개발서버를 환경에 따라 매번 세팅해야 했다.이 프로젝트는 이 개발서버, 저건 저 개발 서버, 프로젝트가 많아지면서 개발서버가 분산되어 관리하기가 어려워져갔다. docker로 로컬 PC에서 환경을 돌려서 꽤 오랫동안 정착했었지만, 몇몇 문제점이 나타나게 됐다.

윈도 환경이라 docker-machine을 올리려면 Virtualbox를 써야 하는데, 리소스가 부족한 경우가 많이 발생했다. 보안 업데이트 때문에 재부팅하면 docker-machine 올리고, 컨테이너 올리고, 프로세스를 실행하는 작업을 해줘야 했는데, 꽤 귀찮았다. 그리고 개발할 때는 컨테이너가 실행되고, 자동으로 프로세스가 뜨도록 세팅하지 않아야 할 경우도 많았다.

그래서 원격의 한 개발서버에서 모든 프로젝트를 작업할 수 있게 환경을 만들었다. 이 때, Supervisor를 사용해서 스위치 on/off 하는 방식으로 프로세스를 관리하며 작업을 할 수 있게 만들었다.

Supervisor 설치하기 :

python 모듈이라서 간단하게 설치할 수 있다.

이제 설정파일을 어떻게 작성하는지 보겠다.

예:

기존 설정파일 다른 부분은 수정하지 않고, 다음과 같이 파이선 프로그램을 추가했다.

설명
command 어떤 커맨드를 실행할지 정의
directory 어떤 디렉토리에서 실행할지 정의
autostart supervisor 데몬이 시작할 때 이 프로세스도 같이 실행할지 정의

이번에는 supervisorctl로 프로세스 관리하는 방법을 알아볼 것이다.

이렇게 실행하면 REPL 상태가 된다. 여기서 각종 커맨드를 사용할 수 있다. 위 예에서는 python 프로세스 3개, webpack 프로세스 1개, 파일 동기화 하는 프로세스 1개를 보여주고 있다.

현재 다음과 같은 프로세스를 사용하고 있다.

  • node.js(gulp + webpack 포함) : 프론트엔드, 백엔드 개발
  • nginx : lua 개발
  • elasticsearch
  • python(flask, zeromq, …)
  • php-fpm

mysql이나 apache 등도 foreground로 실행하도록 추가하면 되지만 이미 서비스스크립트가 있어서 따로 등록하지 않았지만 이들도 supervisor를 통해 관리할 수 있다.

production 환경에서도 사용하면 supervisor를 통해 로그를 볼 수 있고, 프로세스를 관리할 수 있어서 편할 것 같다. 그 전에 production에 사용한 사례가 있는지 확인은 필요할 것 같다.