리눅스 슈퍼 바이저 데몬(Linux super visor daemon)로 프로세스 관리하기
개요
supervisor 는 python 으로 만들어진 제품으로 프로세스를 모니터링/관리하며 데몬 형식으로 지속적으로 동작해야 하는 프로세스가 있을 경우 유용하게 사용할 수 있습니다.
예로 laravel framework 는 queue 를 사용하려면 콘솔에서 다음 명령을 지속적으로 실행해야 합니다.
php artisan queue:work
만약 원격으로 서버에 연결했는데 세션이 끊어진다면 Queue 가 동작하지 않게 되므로 이런 경우 supervisor 를 적용하면 됩니다.
supervisor 는 프로세스 모니터링과 관리를 담당하는 데몬인 supervisord 와 커맨드 유틸리티인 supervisorctl 등의 컴포넌트로 구성되어 있으며 사용하려면 Python 3.4 이상 또는 Python 2.7 이상이 필요합니다.
설치
yum 이나 apt 같은 패키지 매니저로 설치할 수 있지만 pip 로도 설치 가능합니다.
apt 로 설치
sudo apt install supervisor
yum 으로 설치
sudo yum install supervisor
또는 시스템의 패키지 매니저가 아닌 pip 로 설치해도 됩니다.
pip 로 설치
pip install supervisor
개인적인 생각으로는 supervisor 데몬 자체는 systemd 와 같은 시스템의 프로세스 관리 매니저로 관리해야 하므로 pip 보다는 apt 나 yum 등 OS 의 패키지 관리자로 설치하는 것이 좋다고 생각합니다.
OS 의 패키지 관리자로 설치했으면 부팅시 자동으로 구동하도록 다음 명령을 실행합니다.
부팅시 자동 구동 설정
sudo systemctl enable supervisor
RHEL/CentOS 계열은 enable supervisor 대신 enable supervisord 를 사용해야 합니다.
다음 명령으로 supervisor 데몬을 재시작할 수 있습니다.
supervisor 재시작
sudo systemctl restart supervisor
설정
Ubuntu
supervisor 의 설정 파일은 /etc/supervisor/supervisord.conf 에 위치하며 관리 대상 프로세스용 설정 파일은 /etc/supervisor/conf.d/ 에 .conf 확장자로 끝나는 파일을 만들어 주면 됩니다.
예로 위의 laravel queue 를 실행하는 설정을 추가할 경우 /etc/supervisor/conf.d/laravel-queue-worker.conf 파일을 만들어 줍니다.
/etc/supervisor/conf.d/laravel-queue-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log
RHEL/CentOS
CentOS 계열은 supervisor 설정 파일은 /etc/supervisord.conf 이며 /etc/supervisord.d 에 .ini 로 끝나는 개별 프로세스 설정 파일을 작성해 주면 됩니다. 우분투와 동일하게 경로를 맞추려면 다음과 같이 하면 됩니다.
/etc/supervisord.conf 의 include 항목을 수정합니다.
/etc/supervisord.conf
[include] # files = supervisord.d/*.ini files = /etc/supervisor/conf.d/*.conf
CODE설정 파일을 저장할 디렉터리를 생성합니다.
mkdir -p /etc/supervisor/conf.d
CODE기존의 프로세스 설정 파일을 이동합니다.
for i in /etc/supervisord.d/*.ini; do f=`basename $i .ini`; cp $i /etc/supervisor/conf.d/$f.conf; done
CODE기존 폴더를 삭제합니다.
rm -r /etc/supervisord.d/
CODEsupervisord 를 재시작합니다.
bash
systemctl restart supervisord
CODE