विवरण: मेरे पास नोड मॉड्यूल है जो बाहरी निगरानी पृष्ठों को पार्स करता है और दैनिक डेटा को डीबी पर धक्का देता है। इस कार्य में लगभग 10 मिनट लग सकते हैं और नोड-क्रॉन के माध्यम से प्रति दिन एक बार चलने के लिए निर्धारित है। मेरे पास एक पृष्ठ भी है जहां आप इस कार्य को अतिरिक्त तर्कों (जैसे आईडी या दिनांक) के साथ मैन्युअल रूप से प्रारंभ कर सकते हैं। यह एक्सप्रेस मार्ग द्वारा पहुँचा जा सकता है (मान लें app.post('/manual-task', runTask)
)। क्रॉन जॉब और एचटीटीपी रूट एक्सप्रेस रेस्टफुल एपीआई ऐप का हिस्सा है।
प्रश्न: मुझे इस मॉड्यूल का केवल एक चलने वाला उदाहरण चाहिए (इसका वास्तव में क्लास मॉड्यूल), f.e. कोई इस कार्य को पृष्ठ पर प्रारंभ करता है, लेकिन इस कार्य के लिए पहले से ही क्रॉन जॉब चल रहा है। इसे उपयोगकर्ता को सचेत करना चाहिए कि कार्य पहले से ही प्रगति पर है। मेरे पास कुछ विचार हैं, लेकिन मैं बुरी प्रथाओं से बचना चाहूंगा:
- पीआईडी?
- पर्यावरण चर?
- सीधे निष्पादन के बजाय एपीआई के अनुरोध के रूप में क्रॉन नौकरी?
- अगर मैं इसे एक्सप्रेस रूट के अंदर चलाता हूं तो क्या मुझे बाल प्रक्रिया का उपयोग करना चाहिए?
इसे प्राप्त करने का सबसे अच्छा तरीका और अभ्यास क्या है?
धन्यवाद
1 उत्तर
ऐसा लगता है कि राज्य को साझा करने के लिए आपको अपनी प्रक्रिया के कई उदाहरणों के लिए लगातार तरीके की आवश्यकता है। यदि संभव हो, तो सबसे अच्छा तरीका सिस्टम-इंडिपेंडेंट होगा (यानी चलने वाली मशीन पर कुछ नहीं, जैसे pid
या env वेरिएबल) ताकि क्रॉन जॉब से एपीआई को अलग से तैनात करने के लिए आपका समाधान कई मशीनों तक पहुंच सके।
आपकी आवश्यकताओं के आधार पर कुछ दृष्टिकोण हैं लेकिन वे सभी आपकी प्रक्रिया के इर्द-गिर्द घूमते हैं:
- एक जांच करना जब यह पहली बार शुरू होता है यह देखने के लिए कि कोई अन्य प्रक्रिया चल रही है या नहीं।
- यदि कोई है, तो संभावित रूप से छोड़ दें? तर्क आप पर निर्भर है।
- अन्यथा, वर्तमान प्रक्रिया को रिकॉर्ड करने की आवश्यकता है कि यह शुरू हो गया है।
- पार्सिंग करें।
- रिकॉर्ड करें कि यह पार्सिंग समाप्त होने पर रुक गया है।
ऐसा करने का सबसे अच्छा तरीका यह होगा कि प्रत्येक प्रक्रिया एक Lock
प्राप्त कर ले। a> जब इसे शुरू किया जाता है, तो शायद Redis को एक लॉक के रूप में का उपयोग करके। यहां तक कि एक नोड के लिए लाइब्रेरी भी है।
अगर आप रेस कंडीशन को लेकर बहुत चिंतित नहीं हैं, तो आपको इसे लागू करने की ज़रूरत नहीं है लॉकिंग प्रणाली। जब भी कोई प्रक्रिया चल रही हो, तब भी मैं रेडिस जैसी किसी चीज़ को स्टोर करने की सलाह दूंगा, लेकिन आप केवल एक फ़ाइल या कुछ इसी तरह लिख सकते हैं।
संबंधित सवाल
नए सवाल
node.js
Node.js एक घटना-आधारित, गैर-अवरोधक, अतुल्यकालिक I / O रनटाइम है जो Google के V8 जावास्क्रिप्ट इंजन और libuv लाइब्रेरी का उपयोग करता है। इसका उपयोग उन अनुप्रयोगों को विकसित करने के लिए किया जाता है जो क्लाइंट पर और साथ ही सर्वर साइड पर जावास्क्रिप्ट को चलाने की क्षमता का भारी उपयोग करते हैं और इसलिए कोड के पुन: प्रयोज्य और संदर्भ स्विचिंग की कमी से लाभान्वित होते हैं।