supervisor로 daemonize하기

Linux를 사용하다면 보면 프로세스를 데모나이즈(daemonize)해야 하는 일이 생깁니다.

작성한 스크립트나 실행파일 등을 대몬으로 돌려야 하는 경우를 말하는 것입니다.

데몬은 백그라운드로 실행하고 세션을 종료해도 멈추지 않고 계속 작동하는 프로세스를 말합니다.

프로세스 –> 백그라운드 –> 코맨드를 따로 줄때까지 안죽음

일반 프로그램을 위와 같이 만들어 주는 것을 대모나이즈라고 합니다.

데모나이즈 몇가지 방법

데모나이즈는 보통 shell script를 하나 작성해서 실행, 종료를 하게 만듭니다. 이때 대몬이 되는 프로세스가 pid 파일을 만들도록 해야 하고 종료시킬 때 pid를 찾아서 종료하고 재실행하고 하는 것들을 만들어줘야 합니다.

이게 해보면 매우 귀찮은 일입니다.

init.d 스크립트를 만들기

inin.d 스크립트를 작성하는 것은 학습 장벽이 있습니다.
이 글에서는 설명하지 않습니다.

systemd를 사용하기

systemd를 사용해서 간단한 설정 코드를 작성하면 쉽게 대모나이즈 할 수 있습니다만 systemd가 없는 환경도 있습니다.
역시 이 글에서는 설명하지 않습니다.

supervisord를 사용하기

supervisord는 python으로 만든 프로세스를 대모나이즈 해주는 유틸리티입니다.
이 글에서 설명하려고 하는 것입니다.

supervisord 설치하기

supervisord는 두가지 방법으로 설치할 수 있습니다.

apt를 이용해서 설치
apt install supervisor

조금 낮은 버전이 설치될 수 있습니다. 버전에 따라서 버그가 있어서 문제가 있을 수 있습니다.

python pip를 이용해서 설치

python으로 제작했기 때문에 pip로 설치가 가능합니다.

sudo pip3 install supervisor

이렇게 설치하면 supervisor의 설치된 경로가 apt로 설치했을 때와 다르고 초기 설정 파일이 없거나 하는 문제가 있을 수 있지만 최신 버전이 설치되는 장점이 있습니다.

설치되는 경로는 이렇습니다.

/usr/local/bin/supervisord

설정 파일 경로

설정 파일의 경로는 아래의 디렉토리이고 이 디렉토리에 형식을 맞춰서 파일을 작성해주면 됩니다.
여러 개 만들어서 넣을 수 있습니다.

/etc/supervisor/conf.d

다음 내용은 supervisord를 사용한 대모나이즈 설정의 예입니다.

jupyterhub를 대모나이즈 하는 설정입니다.

[program:jupyterhub]
user=root
command=/usr/bin/python3.8 -m jupyterhub --no-ssl -f /etc/jupyterhub/jupyterhub_config.py
directory=/srv/jupyterhub
autostart=true
autorestart=true
startretries=3
exitcodes=0,2
stopsignal=TERM
redirect_stderr=true
stdout_logfile=/var/log/jupyterhub.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB

사용할 때 몇가지 삽질을 방지하기 위한 요령이 있지만 이 글에서는 생략하겠습니다. 글이 너무 길어집니다.

여기까지입니다. 질문, 오류 지적은 언제나 환영입니다.

Author: 떰학

답글 남기기