2016-07-27 5 views
1

나는 서비스우분투 16.04 EC2 스팟 인스턴스supervisord에 의해 파이썬 2.7 작성 및 관리합니다. 시스템 시작에EC2, 16.04, Systemd, Supervisord, 파이썬

나는이 의 숫자가 자리를 차지할 필요 이전이 서비스를 시작을 supervisord 완료 작업을 systemd.

인스턴스가 종료에 관한

, 나는 이벤트를 캡처하고 정상적으로 중단하는 서비스에게 supervisord이 필요합니다. 이 서비스는 정상적으로 종료되기 전에 처리를 중지하고 작업로드를 대기열로 반환해야합니다.

  1. 이 시나리오에서 시스템 시작을 관리하는 최적의 방법은 무엇입니까?
  2. 이 시나리오에서 시스템 종료를 관리하는 최적의 방법은 무엇입니까?
  3. 수퍼바이저서비스 사이의 상호 작용을 어떻게 처리해야합니까?

답변

1

첫째, 우리는 우리가 시작하기 전에 관리자로 실행하려는 systemd 작업를 설치해야합니다. /usr/bin/pre-supervisor.sh 스크립트를 작성하여 해당 작업을 수행하고 시스템 용 /lib/systemd/system/pre-supervisor.service을 작성하십시오.

[Unit] 
Description=Task to run prior to supervisor Starting up 
After=cloud-init.service 
Before=supervisor.service 
Requires=cloud-init.service 

[Service] 
Type=oneshot 
WorkingDirectory=/usr/bin 
ExecStart=/usr/bin/pre-supervisor.sh 
RemainAfterExit=no 
TimeoutSec=90 
User=ubuntu 

# Output needs to appear in instance console output 
StandardOutput=journal+console 

[Install] 
WantedBy=multi-user.target 

당신이 볼 수 있듯이, 이것은 EC2 클라우드 init.service이 완료된 후에 실행하고 이전 supervisor.service에 대한 것입니다.

다음, 우리가 network.target 후 대신의 대가-supervisor.service 완료 한 후 실행하는 /lib/systemd/system/supervisor.service을 수정할 수 있습니다. 우리 전 감독 작업을 시작하기 전에 관리자로 실행되도록합니다

[Unit] 
Description=Supervisor process control system for UNIX 
Documentation=http://supervisord.org 
After=pre-supervisor.service 

[Service] 
ExecStart=/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf 
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown 
ExecReload=/usr/bin/supervisorctl -c /etc/supervisor/supervisord.conf $OPTIONS reload 
KillMode=process 
Restart=on-failure 
RestartSec=50s 

[Install] 
WantedBy=multi-user.target 

.

이러한 스팟 인스턴스이기 때문에, AWS는 메타 데이터 URL에 해지 통보를 노출했다, 나는 단순히 같은 것을 주입해야는 5 초마다 체크 한 내 파이썬 서비스에

if requests.get("http://169.254.169.254/latest/meta-data/spot/termination-time").status_code == 200 

또는 종료 통지가 나타나 자마자 정상적으로 종료됩니다.