본문 바로가기
Linux & Ubuntu

Python Program 가상환경(venv)과 함께 Linux(Ubuntu) Service 등록 방법

by 호빵맨 2022. 2. 9.

Ubuntu 18.04 LTS

Python : 3.6.9

 

파이썬 프로그램 : example.py

 

1. Service File 만들기

/etc/systemd/system 디렉토리에 원하는 이름의 서비스 파일을 작성합니다.

예) example.service

혹은 자신의 홈디렉토리에 서비스 파일을 작성하고 /etc/systemd/system 디렉토리 내부에 심볼릭 링크를 만듭니다.

[Unit]
Description={Service설명}
Wants=network.target #네트워크서비스의 경우
After=network.target

[Service]
type=simple
WorkingDirectory={작업 디렉토리} 예) /home/user1/example
VIRTUAL_ENV={가상환경 경로} 예) /home/user1/example/venv
Environment=PATH=$VIRTUAL_ENV/bin:$PATH
ExecStart=$VIRTUAL_ENV/bin/python3 {실행할 Python Program 경로} 예) /home/user1/example/exampl.py
Restart=on-failure
RestartSec=3s
StandardOutput=file:{로그생성할 경로} 예) /home/user1/example/log.log
StandardError=file:{로그생성할 경로} 예) /home/user1/example/error.log

[Install]
WantedBy=multi-user.target

코드 블럭내의 중괄호{} 내부에는 해당되는 내용을 입력합니다. 중괄호는 입력하지 않습니다.

코드내에 예로든것과 같이 입력합니다.

반응형

2. 서비스 등록 및 실행

sudo systemctl daemon-reload

위의 명령으로 서비스 대몬을 재로드합니다.

sudo systemctl enable example.service

작성한 서비스를 활성화 합니다.

sudo systemctl start example.service

서비스를 시작 합니다.

sudo systemctl status example.service

서비스가 정상적으로 구동되었는지 확인합니다.

정상적으로 구동시 다음과 같이 출력 됩니다.

서비스 동작 확인

 

3. Trouble Shooting

서비스가 구동 되지 않거나 금방 죽는다면, 우선 서비스 파일이 잘 작성 되었는지 확인합니다.

다음으로 파이썬 프로그램을 검토해야 합니다. 상기와 같이 서비스 파일 내에서 StandardOutput설정 하면, 파이썬 프로그램 내에서 print() 문으로 출력하는 내용이 log.log파일에 저장 됩니다. 이를 이용하여 서비스로 등록된 파이썬 프로그램이 잘 동작 하는지 확인 할 수 있습니다. 

본인의 계정으로 잘 실행되는 것도 서비스로 실행시 경로라든지 설정 환경에 따라 실행 되지 않을 수 있습니다. 특히, 파이선 프로그램 내에 로컬 파일이나 프로그램과의 연동되는 부분이 있다면, 반드시 절대 경로로 입력 해야합니다.

댓글