2012-07-07 20 views
7

में स्पष्ट रूप से पुनरारंभ नहीं करता है मैं एक फ्लास्क ऐप चलाने के लिए टॉरनाडो का उपयोग कर रहा हूं, और मेरे पास एक शेल स्क्रिप्ट है जो थोड़ा काम करता है और फिर ऐप चलाता है।टोरनाडो पर्यवेक्षक

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

मैं इस छोटी लिपि को प्रबंधित करने के लिए पर्यवेक्षक का उपयोग करता हूं। काम शुरू करना ठीक है (sudo supervisorctl start theapp.sh), लेकिन जब मैं पुनरारंभ करना चाहता हूं, तो पाइथन सबप्रोसेस बाहर नहीं निकलता है और बंदरगाह पर कब्जा करता है, बंदरगाह पर कब्जा कर रहा है और स्टार्टअप को फिर से रोक रहा है। मैंने यह सुनिश्चित करने के लिए जाल जोड़ने की कोशिश की है कि जब स्क्रिप्ट को पर्यवेक्षक द्वारा रोक दिया जाता है तो पाइथन कोड वास्तव में बंद हो जाता है, लेकिन यह काम नहीं करता है। मैंने gevent के wsgi सर्वर के लिए टर्ननाडो को स्विच करने का प्रयास किया है और मुझे एक ही समस्या है। मुझे यह छोटी लिपि कैसे करनी चाहिए?

उत्तर

0

मुझे पर्यवेक्षक और uwsgi के साथ समान समस्याएं आई हैं, लेकिन यह टॉरनाडो के लिए भी मान्य हो सकती है। समस्या टोरनाडो सेवा को फिर से शुरू करने की अपेक्षा सिग्नल के साथ है। पर्यवेक्षक भेजता है कि डिफ़ॉल्ट सिग्नल SIG_TERM है (stopsignal in docs देखें)। मुझे यकीन है कि क्या तूफान की उम्मीद नहीं कर रहा हूँ, लेकिन आप supervisord config में कुछ और विकल्प, जैसे की कोशिश कर सकते हैं:

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

या

stopsignal=HUP 
+0

हे, बस एक नोट के रूप में: पर्यवेक्षक सिग्कील भेज रहा था, इसलिए मैंने इसे अभी हटा दिया और उबंटू के अपस्टार्ट पर स्विच किया, जो संकेतों को सही तरीके से संभालता है। –

8

अवधि संकेत केवल बैश स्क्रिप्ट theapp.sh के लिए भेजा और है पाइथन प्रक्रिया से कभी प्राप्त नहीं हुआ। आप supevisor कॉन्फ़िगरेशन के प्रोग्राम सेक्शन में stopasgroup विकल्प आज़मा सकते हैं, जो बाश (और अन्य गोले) सिग्नल को संभालने के तरीके के साथ अधिक संगत है [1]।

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

+2

'stopasgroup = true' ने मेरे लिए टॉरनाडो ऐप (पायलबॉक्स) के साथ काम किया –

0

वैकल्पिक रूप से, अगर आपके खोल स्क्रिप्ट केवल "असली" आदेश के बाद preperation सामान और कुछ नहीं करता है, तो आप

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

साथ अंतिम पंक्ति कौन सा खोल का स्थान ले लेगा जगह ले सकता है पायथन प्रक्रिया के साथ प्रक्रिया, इसलिए उत्तरार्द्ध सीधे सिग्नल प्राप्त करता है और अतिरिक्त लाभ के साथ कि आपके पास हर समय चलने वाली निष्क्रिय खोल प्रक्रिया नहीं होती है।

संबंधित मुद्दे