सवाल अपस्टार्ट से एक डेमॉन प्रक्रिया चल रहा है


मैं उबंटू 12.04 एलटीएस के तहत एक वीपीएस पर अपना आवेदन चला रहा हूं।

और मुझे अपने अनुप्रयोगों में से एक के लिए एक डेमॉन प्रक्रिया में समस्या है। इस प्रक्रिया को "delayed_job" कहा जाता है (यदि परिचित नहीं है - यह सिर्फ एक पृष्ठभूमि कार्य हैंडलर है)।

इस प्रक्रिया के साथ समस्या यह है कि कभी-कभी यह मारे जाते हैं (मुझे लगता है कि ऐसा इसलिए है क्योंकि मेरे पास मेरे सर्वर पर सीमित मात्रा में रैम है - केवल 1 जीबी)।

लेकिन इस बात के साथ मुख्य समस्या यह है कि यह है असमर्थ "यूनिकॉर्न" (यह एक रेल ऐप सर्वर) प्रक्रियाओं के विपरीत, क्रैश या "मार" सिग्नल के बाद फिर से बूट करने का होता है, जो कि फिर से बूट हो रहा है इससे कोई फर्क नहीं पड़ता कि उनके साथ क्या होता है।

और हाँ, यह एक बहुत बड़ा सौदा है, क्योंकि बहुत से एप्लिकेशन फीचर्स पृष्ठभूमि कार्यों का उपयोग कर रहे हैं।

वही कहानी तब होती है जब वीपीएस पर रखरखाव कार्य करता है (वीपीएस के मालिक द्वारा शुरू किया जाता है) और पुनरारंभ करने के बाद सिस्टम में "देरी_job" प्रक्रिया मौजूद नहीं होती है।

यह वह आदेश है जिसे मैं इसे बूट करने के लिए हर बार चलाता हूं: RAILS_ENV=production script/delayed_job start

यह एक प्रसिद्ध समस्या है, लेकिन इंटरनेट पर मुझे मिला एकमात्र समाधान यह आलेख है: http://www.alexreisner.com/code/upstart जो कि "respawn" विकल्प के साथ लिनक्स की "अपस्टार्ट" सुविधा का उपयोग करने का सुझाव देता है जो प्रक्रिया को फिर से बूट करने में सक्षम है अगर यह मारे गए या दुर्घटनाग्रस्त हो जाए।

भले ही लेख थोड़ा सा दिनांकित है, मुझे पता चला कि उबंटू 12.04 को इस सुविधा का समर्थन करना चाहिए और मैंने एक सिम्लिंक बनाया है /etc/init निर्देशिका (मैंने इसे कहा है: delayed_job.conf) "delayed_job" फ़ाइल में जिसे मैं अपने अनुप्रयोग फ़ोल्डरों में से एक में डाल दूंगा (app_name / config, सटीक होने के लिए) - मैंने यह लेख सबकुछ किया है।

मेरी समस्या यह है: जब मैं इस नई प्रक्रिया को बूट करने का प्रयास करता हूं (start delayed_job) कंसोल में मुझे मिलता है:

delayed_job start/running, process 6000

लेकिन वास्तव में - कोई भी "देरी_job" प्रक्रिया बिल्कुल नहीं हो रही है।

और स्थिति (status delayed_job) initctl प्रक्रिया के अभी भी है: delayed_job stop/waiting

निष्पादित करने के बाद kill -9 6000 मुझे मिला -bash: kill: (6000) - No such process

तो, इसका मतलब है कि कुछ भी निष्पादित नहीं होता है। मैंने अलग-अलग स्थितियों के तहत कई बार दौड़ने की कोशिश की है - कुछ भी नहीं, कोई फायदा नहीं हुआ। बस काम नहीं करता है।

क्या कोई काम है जो मैं इसे काम करने की कोशिश कर सकता हूं, या यह सिर्फ बेकार है?


4
2018-02-23 19:11


मूल




जवाब:


लगता है कि आपकी एक्सपेक्ट स्टांजा गलत है या नहीं। अपस्टार्ट गलत पिड को ट्रैक कर रहा है। उपयोग करने के निर्देशों के लिए कुकबुक देखें उम्मीद। चेतावनी पर ध्यान दें कि उस अनुभाग को समझना कितना महत्वपूर्ण है।

ध्यान दें कि यदि आपका अनुप्रयोग अपने पिड को ट्रैक करने के लिए अपस्टार्ट के लिए बहुत फोर्की है (जिसका अर्थ यह दो गुना से अधिक है), तो आप इसे स्वयं ट्रैक कर सकते हैं। ऐप में एक पिड फ़ाइल लिखने के लिए एक तंत्र हो सकता है, या आप इसे कैप्चर करने में सक्षम हो सकते हैं start-stop-daemon। देख इस एक उदाहरण के लिए जवाब, विशेष रूप से pg_agent.conf फ़ाइल।

संपादित करें:

नोट, यदि अपस्टार्ट आपके ऐप के पिड को ट्रैक नहीं कर सकता है, तो आप इसका उपयोग करने में सक्षम नहीं होंगे RESPAWN छंद। इस मामले में अपस्टार्ट आपकी आवश्यकताओं के अनुरूप नहीं हो सकता है। शायद एक प्रतिस्पर्धी उत्पाद की तरह foreverमर्जी। क्या पता।


4
2018-02-25 17:45



हाँ। मैंने बिल्कुल "उम्मीद" Stanza का उपयोग नहीं किया था। धन्यवाद! मैं एक नजर मार लूगां! - Dmitri
खैर, अब दोनों काम शुरू करें और "रोकें", लेकिन, 'देरी_job' प्रक्रिया बूटिंग-अप नहीं है (ps aux | grep "delayed_job" के अनुसार)। मैंने दोनों विकल्पों की कोशिश की: कांटा और डिमन - न तो काम करता है। - Dmitri
क्या है कांटा गिनती? - Brian.D.Myers
क्या मुझे इसे स्ट्रेस का उपयोग करके गिनना चाहिए? यदि 2 (डेमॉन) से अधिक है तो मुझे क्या करना चाहिए? - Dmitri
हाँ, स्ट्रेस के साथ गिनें। विचारों के लिए मेरे संपादित उत्तर की अंतिम वाक्य देखें यदि यह> 2 है। - Brian.D.Myers