supervisord를 활용한 다중 프로젝트 프로세스 통합 관리

여러 개의 서비스를 동시에 운영해야 하는 상황에서 개별 터미널로 일일이 실행하는 것은 비효율적입니다. 본 가이드에서는 Python 메인 서비스, 보조 모듈, Celery 스케줄러, 그리고 Spring Boot 애플리케이션을 supervisord 하나로 묶어 관리하는 방법을 살펴봅니다.

설치 및 환경 구성

가상 환경 내부에 supervisord를 설치하면 매번 환경을 활성화해야 하는 번거로움이 있습니다. Anaconda 기준으로 base 환경에 설치하여 전역에서 바로 사용할 수 있게 구성합니다.

pip install supervisor

설정 파일 구성

기본 설정 파일 생성 명령을 프로젝트 루트로 redirect하여, 관리 포인트를 줄입니다.

echo_supervisord_conf > /home/alex/project_root_path/supervisord.conf

supervisord 본체 설정

핵심은 로그 경로 지정입니다. 아래는 서비스 자체의 실행 기록을 남기는 설정이며, 개별 프로그램의 출력 로그와는 별개입니다.

[supervisord]
logfile=/home/alex/project_root_path/supervisord.log

개별 프로그램 등록

각 프로세스를 [program:별칭] 섹션으로 등록합니다. directory는 명령 실행 전 진입할 작업 디렉터리이며, command에는 가상 환경의 절대 경로를 포함한 실행 구문을 작성합니다.

Python 메인 서비스

[program:main_svc]
command=/home/alex/anaconda3/envs/test_env/bin/python -u main.py
directory=/home/alex/project_root_path
stdout_logfile=supervisor_run_main.log
stderr_logfile=supervisor_run_main.log

Celery 워커 (비트 스케줄러 내장)

[program:celery_beat]
command=/home/alex/anaconda3/envs/test_env/bin/celery -A tasks worker -B
directory=/home/alex/project_root_path
stdout_logfile=supervisor_run_celery.log
stderr_logfile=supervisor_run_celery.log

Spring Boot (Maven)

[program:hk_api]
command=mvn spring-boot:run
directory=/home/alex/pom_xml_location
stdout_logfile=supervisor_run_hkapi.log
stderr_logfile=supervisor_run_hkapi.log

트러블슈팅

print() 출력이 로그에 기록되지 않음

표준 출력 버퍼링으로 인해 실시간 기록이 누락됩니다. Python 인터프리터 호출 시 -u 플래그를 추가하여 버퍼를 비활성화합니다.

command=/home/alex/anaconda3/envs/test_env/bin/python -u main.py

가상 환경 연동 실패

쉘 명령어인 conda activate를 command에 직접 사용하거나, environment 항목으로 PYTHONPATH를 오버라이드하는 시도는 정상 동작하지 않았습니다. 가장 확실한 방법은 실행할 해석기의 전체 경로를 하드코딩하는 것입니다.

핵심 운영 명령

명령어설명
supervisord데몬 시작
supervisorctl start <name>특정 프로세스 기동
supervisorctl restart <name>특정 프로세스 재시작
supervisorctl stop <name>특정 프로세스 중지
supervisorctl stop all전체 프로세스 중지
supervisorctl status현재 실행 상태 확인
supervisorctl reload설정 반영 및 데몬 재구동
supervisorctl update변경된 설정만 선택적으로 적용

태그: supervisord process-management python celery spring-boot

6월 30일 18:44에 게시됨