पर्यवेक्षक नई कॉन्फ़िगरेशन फ़ाइलों को लोड नहीं कर रहा है


68

मुझे Gunicorn और Supervisor का उपयोग करके Django ऐप को तैनात करने में समस्या है। जबकि मैं Gunicorn को अपने ऐप में सेवारत कर सकता हूं (उचित PYTHONPATH की स्थापना करके और उपयुक्त कमांड चलाकर, सुपरवाइजर कॉन्फिग से एक) मैं इसे चलाने के लिए सुपरवाइज़र नहीं बना सकता। यह सिर्फ मेरा ऐप नहीं देखेगा। मुझे पता नहीं है कि अगर विन्यास फाइल ठीक है तो कैसे सुनिश्चित करें।

यहाँ पर्यवेक्षक का कहना है:

# supervisorctl start myapp_live
myapp_live: ERROR (no such process)

मैं इसे निम्नलिखित विन्यास के साथ Ubuntu 10.04 पर चला रहा हूं:

फ़ाइल /home/myapp/live/deploy/supervisord_live.ini:

[program:myapp_live]
command=/usr/local/bin/gunicorn_django --log-file /home/myapp/logs/gunicorn_live.log --log-level info --workers 2 -t 120 -b 127.0.0.1:10000 -p deploy/gunicorn_live.pid webapp/settings_live.py
directory=/home/myapp/live
environment=PYTHONPATH='/home/myapp/live/eco/lib'
user=myapp
autostart=true
autorestart=true

/Etc/supervisor/supervisord.conf में, फ़ाइल के अंत में, है:

[include]
files = /etc/supervisor/conf.d/*.conf

और यहां मेरी कॉन्फ़िग फ़ाइल के लिए एक सिम्लिंक है:

# ls -la /etc/supervisor/conf.d
lrwxrwxrwx 1 root root   48 Dec  4 18:02 myapp-live.conf -> /home/myapp/live/deploy/supervisord_live.ini

मेरे लिए सब कुछ ठीक लग रहा है, लेकिन सुपरवाइजरक्टल सिर्फ कहते रहते हैं myapp_live: ERROR (no such process)। इसके लिए कोई उपाय?


मैं उसी समस्या से अपना सिर खुजला रहा था; मेरी विन्यास फाइल को लोड किए जाने नहीं कर रहे थे जब मैं भाग गया rereadया update। यह पता चला कि मैंने अपनी कॉन्फिग फाइलों को सेव कर लिया था foo.conf.py, foo.confताकि वे पहचाने नहीं जा रहे थे।
टिम्मी ओ'मोनी

जवाबों:


31

मेरे पास एक ही मुद्दा था, ए

sudo service supervisord reload

चाल चली, हालाँकि मुझे नहीं पता कि आपके प्रश्न का उत्तर है या नहीं।


2
मैं रुक गया और फिर कुछ समय पहले पर्यवेक्षक शुरू किया और यह काम किया। पता नहीं कि क्या फिर से काम करेगा (जैसा कि मैंने दिल को फिर से शुरू नहीं किया है) लेकिन मुझे लगता है कि यह हो सकता है
grucha

मैंने भी किया और यह काम कर गया। मुझे आश्चर्य है कि /etc/init.d/supervisor restartजब मैनुअल स्टॉप और स्टार्ट करते हैं तो काम क्यों नहीं करता है।
किरिल

1
मेरे लिए काम किया, हालांकि सेवा काम नहीं करती थी इसलिए मैं बस चला ps aux | grep supervisorऔर फिरsudo kill -HUP pid
वेन वर्नर

2
यह खतरनाक है क्योंकि यह पर्यवेक्षक डेमन के पूरे को फिर से शुरू करेगा।
मार्क थ्युनिसन

7
सुपरवाइजर रीलेड सेवा को फिर से शुरू किए बिना इस अस्वस्थता को ठीक कर सकता है।
जोनाथन लियुटी

199

सही उत्तर यह है कि जब आप एक नई कॉन्फ़िगरेशन फ़ाइल रखते हैं तो पर्यवेक्षक को आपको फिर से पढ़ने और अपडेट करने की आवश्यकता होती है । पुनरारंभ करना जवाब नहीं है, क्योंकि यह अन्य सेवाओं को प्रभावित करेगा। प्रयत्न, कोशिश:

supervisorctl reread
supervisorctl update

13
यह सही उत्तर होना चाहिए। "सुपरवाइज़र रेयरेड" अकेले पर्याप्त नहीं है।
मिबस्टर

3
+1 यह एक बेहतर उत्तर है क्योंकि यह प्रक्रिया प्रबंधकों पर निर्भर नहीं करता है।
tidwall

8
अकेले "सुपरवाइज़रल रीरेड" पर्याप्त नहीं है, लेकिन "सुपरवाइज़रलैटल अपडेट" पर्याप्त नहीं होगा? दस्तावेज़ीकरण के अनुसार "अपडेट" एक रीरेड करता है जिसके बाद किसी भी प्रोग्राम को फिर से शुरू किया जाता है जिसका कॉन्फ़िगरेशन रीरेड द्वारा संशोधित किया गया था।
ब्लू बॉम्बर

यह मेरे लिए काम करता है। मैंने बाद में पुनः आरंभ किया है।
user1012513

15

सुनिश्चित करें कि आपके पर्यवेक्षक conf फाइलें .conf में समाप्त होती हैं

मुझे यह पता लगाने में थोड़ा समय लगा कि मैं बाहर हूँ। उम्मीद है कि यह अगले व्यक्ति की मदद करता है।


1
एक ही मुद्दे पर एक घंटा बर्बाद किया - विश्वास नहीं कर सकता कि यह सरल था।
ज़ेन हूपर

1
इस उत्तर को सूचीबद्ध करने के लिए धन्यवाद। मेरे जीवन के लिए, मैं यह पता नहीं लगा सका।
फिलिप मार्टिन

14

मास्टर पर्यवेक्षक प्रक्रिया को पुन: लोड करने से काम हो सकता है, लेकिन यदि आपके पास पर्यवेक्षक द्वारा निगरानी की जाने वाली एक से अधिक प्रक्रिया है, तो इसके अनपेक्षित दुष्प्रभाव होंगे।

इसे करने का सही तरीका यह है कि यह supervisorctl rereadकिसी भी बदलाव के लिए कॉन्फ़िगरेशन फ़ाइलों को स्कैन करने का कारण बनता है:

root@debian:~# supervisorctl reread
gunicorn: changed

फिर, बस उस एप्लिकेशन को पुनः लोड करें:

root@debian:~# supervisorctl restart gunicorn
gunicorn: stopped
gunicorn: started

यह सबसे अच्छा समाधान है यदि आप केवल एक बदली हुई / नई कॉन्फिग फाइल को पढ़ना चाहते हैं और बाकी की चल रही प्रक्रियाओं को छोड़ दें। Supervisorctl दिखाएगा नया ऐप्लिकेशन है avail। इसे (पुनः) शुरू करने योग्य प्रक्रियाओं को जारी करके जोड़ें supervisorctl update। यह भी देखें मार्क जवाब serverfault.com/a/479754/125887
Sjaak Trekhaak

4
मेरे लिए यह पर्याप्त नहीं था। supervisorctl updateआवश्यक था।
यारोस्लाव निकितेंको

5

मुझे Ubuntu Server 12.10 से संस्करण 3.0a8-1.1 पर्यवेक्षक पैकेज का उपयोग करके इस समस्या का सामना करना पड़ा। मैंने अन्तर्निर्मित मदद को पढ़कर समस्या को हल किया:

$ sudo supervisorctl help restart
restart <name>          Restart a process
restart <gname>:*       Restart all processes in a group
restart <name> <name>   Restart multiple processes or groups
restart all             Restart all processes

विशेष रूप से आप वाक्यविन्यास का उपयोग करना चाहते हैं:

sudo supervisorctl restart myapp_live:*

जैसा कि प्रलेखन http://supervisord.org/configuration.html#programx-section पर बताता है - "ए [कार्यक्रम: x] अनुभाग वास्तव में पर्यवेक्षक (3.0 के रूप में) के लिए एक" सजातीय प्रक्रिया समूह "का प्रतिनिधित्व करता है।" तो शायद समस्या पहली बार संस्करण 3.0 में सामने आई।

पुनश्च: मैं पर्यवेक्षक के लिए नया हूँ; मैं https://github.com/bdarnell/tornado-production-skeleton/blob/8ad055457646929c0e8f48aaf20d98f054b1787b-production/chat.supervisor का उपयोग कर रहा हूं कि एक न्यूनतम कॉन्फ़िगरेशन कैसा दिखना चाहिए।


4

मुझे एक समान समस्या थी ( myapp_live: ERROR (no such process)) और इसकी वजह यह थी कि मेरी प्रक्रिया परिभाषा थी

[program: myapp_live]

जब होना चाहिए था

[program:myapp_live]

हालांकि यह पूछे जाने वाले प्रश्न को संबोधित नहीं करता है, मैं खोज द्वारा यहां नेतृत्व कर रहा था जो कि मेरी समस्या का समाधान खोज रहा है, इसलिए उम्मीद है कि अन्य लोग भी इसे यहां पाएंगे।


मुझे भी! मैंने इसे [program]डॉक्स के बाद ही छोड़ दिया था , लेकिन इसे बनाने से यह [program:redis]मेरे लिए काम कर गया। यकीन है कि चीजें कई बार अजीब हो जाती हैं!
अंकुश

2

मुझे यह समाधान सबसे सुविधाजनक लगा:

EDIT: ऐसा करने से पहले अपने पर्यवेक्षक मार्ग की जांच करके which supervisorctlसुनिश्चित करें कि आप sudoers में सही रास्ता जोड़ रहे हैं।

इस लाइन को sudoers फ़ाइल में उपयोग करके जोड़ें visudo(जहाँ: myappuser- वह उपयोगकर्ता जिसे आपके ऐप को पुनः आरंभ करने की आवश्यकता है, myapp- ऐप का नाम):

myappuser  ALL=(ALL) NOPASSWD: /usr/bin/supervisorctl restart myapp

और फिर बस:

sudo supervisorctl restart myapp

आप डिस्ट्रीब्यूशन की स्टार्टअप स्क्रिप्ट से बंधे नहीं हैं और आप उपयोगकर्ता को अपने gunicorn ऐप को पुनः आरंभ करने के लिए काफी संकीर्ण विशेषाधिकार देते हैं। इसके अलावा, आपको पिड की देखभाल करने की आवश्यकता नहीं है। कमांड पासवर्ड नहीं मांगेगा, इसलिए यह ऑटो-परिनियोजन बैश / फैब्रिक स्क्रिप्ट के लिए उपयुक्त है। दूसरी तरफ - आपको इस बात से अवगत होना होगा कि यदि पर्यवेक्षक कुछ बग के कारण असुरक्षित है, तो कोड निष्पादन एक दुर्भावनापूर्ण उपयोगकर्ता कोड के रूप में चलाने के लिए इस sudo विशेषाधिकार का उपयोग कर सकता है (लेकिन जहां तक ​​मुझे पता है कि पर्यवेक्षक के लिए ऐसा कोई बग नहीं खोजा गया था और यह इस तरह की भेद्यता को खोजने के लिए एक बड़ी बात है)।


2

यहाँ supervisorctl.py का कोड पढ़ना: https://github.com/Supervisor/supervisor/blob/master/supervisor/supervisorctl.py

आप देख सकते हैं कि पर्यवेक्षक अद्यतन (फ़ंक्शन do_update) reloadConfig () को ठीक उसी तरह से कॉल कर रहा है, जैसा कि पर्यवेक्षक सीसीएल (फ़ंक्शन do_reread) करता है।

इसलिए मुझे लगता है कि यदि आप अपडेट को कॉल करते हैं, तो रिडर को कॉल करना आवश्यक नहीं है।

Git blame के आउटपुट से यह कम से कम जुलाई 2009 से ऐसा ही है।


2

यहाँ एक चेकलिस्ट है:

  1. नई कॉन्फ़िगरेशन फ़ाइल को /etc/supervisord.conf में कॉन्फ़िगर किए गए शामिल पैटर्न के अनुसार नाम दिया जाना चाहिए:

    [include]
    files=supervisord.d/*.ini
    

    जैसा कि हम मेरे मामले में देखते हैं, spam.ini शामिल होगा, लेकिन spam.conf नहीं होगा।

  2. यदि आपने पुरानी फ़ाइल की प्रतिलिपि बनाकर नई फ़ाइल बनाई है, तो वास्तव में [program:]लाइन बदलना सुनिश्चित करें । क्योंकि यदि आप एक ही प्रोग्राम के लिए दो फाइल रखने में उतने ही मूर्ख हैं, तो आपको supervisorctl rereadसजा के रूप में इस निराशाजनक त्रुटि संदेश के साथ छोड़ देगा:

    No config updates to processes
    
  3. यदि आपकी फ़ाइल का पता चला है, तो supervisorctl rereadकुछ कहना चाहिए:

    spam: available
    
  4. फिर, supervisorctl update spamक्या दोनों को इसे शुरू करना चाहिए और इसे प्रकट करना चाहिए supervisorctl status


1

मैंने विभिन्न उबंटू / डेबियन संस्करणों की एक किस्म पर init.d स्क्रिप्ट को अविश्वसनीय पाया है। यह करने का तरीका यह है:

sudo supervisorctl reload

यह ऐसा करने का सही तरीका नहीं है, हालांकि यह कई परिस्थितियों में काम करेगा। @ बुरहान-खालिद जवाब सही है, और इसके लिए एक स्पष्टीकरण प्रदान करता है।
ग्लार्रेन

1

सीलिंक से सावधान रहें और पर्यवेक्षक पर फाइलें शामिल करें। यह ini फ़ाइल को बदलने और किसी भी दुर्भावनापूर्ण कोड को शुरू करने के लिए किसी भी व्यक्ति को / home/myapp/live/deploy/supervisord_live.ini पर विशेषाधिकार प्रदान करेगा। यह आईएनआई फाइलें आपके पर्यवेक्षक की गोपनीय निर्देशिका के अंदर या उसके नीचे किसी भी उपखंड में होनी चाहिए।


0

मैंने यम इंस्टाल के साथ सुपरवाइजर स्थापित किया था, जो संस्करण v2 के सुपरवाइजर को स्थापित करता था। *। पर्यवेक्षक बाहरी का समर्थन करता है केवल संस्करण 3 से ही शामिल है। पर्यवेक्षक v3 को स्थापित करने के लिए इसके बजाय easy_install का उपयोग करना पड़ा।


यह भी मेरा मुद्दा था, यह शायद सभी सेंटोस 6.5 या उससे कम इंस्टॉल पर होगा।
बेयरिटो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.