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 activatecommand에 직접 사용하거나, 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에 게시됨