본문 바로가기
윈도우서버

윈도우 2019 서버 supervisor-win 설치

by 베어그릴스 2024. 10. 18.
반응형

애플리케이션을 개발하고 배포 시에 데몬이 어떤 이유로 죽은 경우 바로 되살려서 데몬이 떠있는 걸 유지하고 싶은 

경우가 있습니다. 예를 들어 서버에서 구동되는 프로그램들이 그렇죠. 
위의 기능을 가능하게 해주는 프로그램이 슈퍼바이저입니다.

 

일종의 안전장치를 하나 더 건다고 보시면 되겠습니다.

사람이 수동으로 떨어질 때마다 알람 설정을 해서 켜고 끄고 할 수도 있고

해당 포트를 실시간 간격으로 체크해서 자동으로 띄워주는 쉘을 만들어 놓을 수도 있습니다.

 

아래는 그러한 과정을 슈퍼바이저 매니저툴이 대신해 준다고 보면 되겠습니다.

 

리눅스에서만 사용해 봤지 윈도우용이 있는 건 몰랐습니다.

 

윈도에서도 지속적으로 서비스를 가동해야 할 경우가 생깁니다.

 

was 서버나 openas2 같이 상시 떠있어야 하는 서비스들 말이죠

 

그래서 생각 했습니다. 윈도 서버에서는 어떻게 지속적으로 데몬을 관리할 수 있을까?

 

윈도 자체기능인 서비스 등록이나 NSSM을 통해 bat 파일을 서비스로 등록하면 문제가 얼핏 해결될 것 같지만 중단된 경우는 캐치를 못한다는 것입니다.

 

그래서 윈도 서버에 파이썬을 설치 후 supervisor를 설치하여 해결하고자 하였습니다.

supervisor

 

1. 파이썬 설치(3.10)

https://www.python.org/downloads/windows/

 

TIP 파이썬은 3.11 버전 이하로 설치해야 합니다. 그래야 윈도우 2019 서버에서 호환성 문제없이 정상 작동 합니다.

필자는 3.10으로 설치하였습니다.

 

설치 후 cmd 창을 열어 테스트해봅니다.

 

 

2. 슈퍼바이저 설치

python -m pip install supervisor-win

 

CMD를 관리자 권한으로 연후 설치해 줍니다.

 


3. 설정 파일 생성 및 구성

echo_supervisord_conf

더보기

[supervisord] :  supervisord 데몬에 대한 log 등 기본 항목 설정    
[supervisorctl] : server api 포트 및 user/passwd 설정    
[program]  : 관리가 필요한 프로그램 등록 동일한 프로그램을 여러 개 수행할 때 - process_name=%(program_name)s_%(process_num)02d (3개 수행) - command=/path/to/programname --port=80%(process_num)02d  (8000, 8001, 8002)
[inet_http_server] : 관리용 http 서버 설정 정보    
[rpcinterface:supervisor] : supervisor내에 통신하는 rpc 인터페이스 설정

옵션 설명

더보기
# tomcat 자동 재시작 
# [program:tomcat8] 서비스명
# command           실행할 프로그램의 경로와 명령을 지정합니다.
# autorestart       자동재시작 여부
# process_name      기본적으로 [program:tomcat8]에서 tomcat8 지정한 프로세스 이름을 사용하게 된다.
# startsecs         프로세스가 유지해야 할 시간. 기본적으로는 1초
# stopsignal        INT 프로세스 id 를 주면 해당 프로세스에 시그널을 보낼 수 있습니다
# user              tomcat 프로그램을 실행할유저 webstyle 일경우 webstyle 으로변경
# redirect_stderr   스크립트내의 에러 출력 여부
# stdout_logfile=/home/tomcat/tomcat8.5/logs/tomcat.log 로그저장할곳
# ! 반드시 directory를 지정해야됨 권한 관련 에러 때문에 500에러를 발생시킴 
# startretries =5 리트라이 횟수

 

 

톰캣 / as2를 구동시킨 conf  코드도 첨부드립니다.

더보기
[supervisord]
logfile=D:/supervisor/log/supervisord.log
pidfile=D:/supervisor/log/supervisord.pid
nodaemon=false

[inet_http_server]
port=127.0.0.1:8070

[supervisorctl]
serverurl=http://127.0.0.1:8070

[program:tomcat]
command=D:/EBD_AZ_WC_WEB/bin/catalina.bat run
directory=D:/EBD_AZ_WC_WEB/
autostart=true
autorestart=true
process_name=tomcat
#5초
startsecs=5
stopsignal=INT
user=vboxuser
redirect_stderr=true
stderr_logfile=D:\supervisor\log\tomcat.err.log  ; 
stdout_logfile=D:\supervisor\log\tomcat.out.log  ;
더보기
[supervisord]
logfile=D:/supervisor/log/supervisord.log
pidfile=D:/supervisor/log/supervisord.pid
nodaemon=false

[inet_http_server]
port=127.0.0.1:8070

[supervisorctl]
serverurl=http://127.0.0.1:8070

[program:as2]
command=D:/DS_OD_AS2/bin/start-openas2.bat
directory=D:/DS_OD_AS2/
autostart=true
autorestart=true
process_name=as2
#5초
startsecs=20
stopsignal=INT
user=vboxuser
redirect_stderr=true
stderr_logfile=D:\supervisor\log\as2.err.log  ; 
stdout_logfile=D:\supervisor\log\as2.out.log  ;

 

4. 실행

supervisord -c D:\supervisor\(위 작성한 conf명 입력).conf

 

5. 테스트

supervisor를 통하여 openas2 서비스를 지속적으로 관리하기 위해 등록시켰으며, 테스트를 진행

1. 슈퍼바이저를 실행하면 as2 서비스의 port가 올라오는지 테스트

2. 해당 port를 찾아 PID 검색 후 kill 명령어로 종료 시 자동으로 올라오는지 테스트

 

 

5. 재부팅 후 테스트

리눅스도 마찬가지로 supervisor 자체를 시스템 재 부팅 시 올라오게끔 설정해 주는 부분이 있는대 systemctl 명령어로

 

윈도도 동일하다 supervisor 서비스에 등록하면 해결된다.

 

start-supervisord.bat 파일을 서비스에 등록시켜 준다.(bat 파일은 nssm으로 등록할 수 있다.) -.. 앗 NSSM 등록하는 방법도 포스팅해야겠다.

@echo off
start "" /b supervisord -c D:/supervisor/supervisord.conf

 

위와 같이 슈퍼바이저 데몬이 떠 있을 경우 지속적으로 as2 밑 was 서버를 관리할 수 있다.

 

 

오늘도 보람찬 생존 ^.^

반응형

댓글