최근에 Python을 사용하여 서비스를 만들었습니다. while True:
서비스를 실행하는 함수가 포함되어 있습니다 . 서비스 같은 것을 제공하는 것이 이번이 처음이고 클라이언트에게 비용을 청구한다는 점을 감안할 때 경험이 많은 개발자에게 몇 가지 기본적인 질문이 있습니다(죄송합니다).
화면. 현재 애플리케이션을 실행하려면 screen을 사용합니다. SSH를 통해 서버에 연결하고 화면으로 이동하여
python service.py
SSH를 분리하고 닫았습니다. 이것이 최선의 방법입니까? 다른 사람들은 무엇을 하나요? 예전에는 자주 사용했는데crontab
지금은 계속해서 서비스가 실행되고 있습니다.모든 것이 거기에 있으므로
try:
예상치except:
못한 일이 발생하면 나에게 이메일을 보냅니다. 그래도 화면이 갑자기 꺼지면(왜 그런 일이 발생하는지 잘 모르겠습니다) 이메일을 받지 못하고 서비스가 실제로 작동하지 않는 동안 편안하게 잠에 들겠습니다. 사람들이 추가 알림을 추가할까요? 예를 들어 프로세스에 이름을 지정하고 체커를 추가하면 프로세스가 실행되고 있지 않으면 이메일을 받게 됩니까?모든 것을 도커 컨테이너로 포장해야 합니까? 확장할 필요가 없는 애플리케이션이라면 어떻게 될까요? 이것이 좋은 접근 방식입니까?
미리 감사드립니다.
답변1
말씀하신 대로 Docker 이미지를 생성하고 실행하는 것은 선택 사항입니다.
그러나 *nix 시스템에서 더 쉬운 접근 방식은 Supervisord를 사용하여 서비스를 실행하는 것입니다. 그뿐만 아니라 python
다양한 스크립트를 실행했습니다. 이러한 간단한 웹 서비스를 고정할 필요 없이 Flask 애플리케이션을 실행하기도 합니다.perl
shell
ruby
supervisord
supervisord
실제로 레거시 애플리케이션 마이그레이션을 위해 Docker 컨테이너에서 여러 서비스를 실행해야 하는 몇 가지 경우에는 ENTRYPOINT에서 Supervisord를 사용했습니다. 이는 권장되지 않으며 전체 컨테이너화 및 클라우드 기본 철학에 어긋나지만 해야 합니다. 가끔 이런 일들이.
supervisord
Ubuntu에서는 다음과 같이 설치할 수 있습니다 .
$ sudo apt install supervisor
그런 다음 감독 서비스를 활성화하십시오.
$ sudo systemctl enable supervisor
$ sudo systemctl start supervisor
샘플 구성 파일은 다음과 같습니다.
$ sudo vi /etc/supervisor/conf.d/service_name.conf
[program:service_name]
command=/usr/local/bin/python_script.py
directory=/home/app
user=app
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
stdout_logfile = /var/log/supervisor/service_name.log
redirect_stderr = true
구성의 자동 다시 시작은 어떤 이유로 서비스가 종료된 경우 서비스가 다시 시작되도록 보장합니다. 자동 시작은 시스템을 재부팅하면 시스템 부팅 시 감독자가 시작되도록 활성화되어 있는 한 서비스가 시작되도록 보장합니다.
서비스를 생성한 후 다음과 같이 실행할 수 있습니다.
$ sudo supervisorctl start service_name
필요할 때 상태를 확인할 수 있습니다 -
$ sudo supervisorctl stop service_name
사용 중인 서비스를 중지하려면 -
$ sudo supervisorctl stop service_name
여기에서 자세한 내용을 읽을 수 있습니다.http://supervisord.org/