2012-07-07 17 views
7

içinde yeniden başlatılmıyor Bir flask uygulaması çalıştırmak için kasırga kullanıyorum ve biraz çalışıp daha sonra uygulamayı çalıştıran bir kabuk komut dosyası kullanıyorum.Tornado, denetçi

#!/usr/bin/env bash 
some_work 
more_work 
python /usr/share/theapp/theapp.py 

Bu küçük komut dosyasını yönetmek için denetleyici kullanıyorum. Çalıştırmak iyi çalışıyor (sudo supervisorctl start theapp.sh), ancak yeniden başlatmak istediğimde, python alt işlemi çıkmıyor ve bağlantı noktasını kapatmıyor, bağlantı noktasını kaplıyor ve yeniden başlatma işlemini engelliyor. Komut dosyası denetleyici tarafından durdurulduğunda python kodunun gerçekten durdurulduğundan emin olmak için tuzak eklemeyi denedim, ancak bu işe yaramadı. Gevent'in wsgi sunucusu için kasırga değiştirmeyi denedim ve aynı problemi yaşadım. Bu küçük senaryoyu nasıl yapmalıyım?

cevap

0

Supervisord ve uwsgi ile benzer sorunlar yaşadım, ancak Tornado için de geçerli olabilir. Sorun, Tornado servisinin yeniden başlatmayı beklediği sinyaldir. Denetleyicinin gönderdiği varsayılan sinyal SIG_TERM'dir (stopsignal in docs'a bakın). Tornado'nun beklediği emin değilim, ama sizin gibi supervisord config dosyasındaki bazı daha fazla seçenek, deneyebilirsiniz:

# /etc/supervisor.d/myprogram.ini 
# http://supervisord.org/configuration.html#program-x-section-values 
[program:myprogram] 
command=/path/to/script/ 
.... 
stopsignal=INT 

veya

stopsignal=HUP 
+0

Hey, bir not olarak: süpervizör SIGKILL'i göndermeye devam etti, bu yüzden sadece onu bıraktım ve Ubuntu'nun sinyallerini düzgün bir şekilde ele alan iniş çıkışına geçtim. –

8

SÜRE sinyali sadece bash komut theapp.sh gönderilir ve python sürecinden hiç almadım. Bash (ve diğer kabuklar) sinyallerini [1] nasıl işlediğiyle daha uyumlu olan supevisor yapılandırmasının program bölümünde stopasgroup seçeneğini deneyebilirsiniz. Kabuk komut yalnızca "gerçek" komutundan sonra hazırlık malzeme ve hiçbir şey yapmazsa

[1] http://www.vidarholen.net/contents/blog/?p=34

+2

'stopasgroup = true' bir Tornado uygulamasıyla benim için çalıştı (pilbox) –

0

Alternatif olarak, kabuk yerini alacak

exec python /usr/share/theapp/theapp.py 

ile son satırı yerine python işlemiyle işlem yapar, böylece ikincisi doğrudan sinyali alır ve her zaman çalışan boş bir kabuk işlemine sahip olmamanıza ek yarar sağlar.

İlgili konular