सर्वर कार्यों को क्रोन की तुलना में अधिक समझदारी से कैसे निर्धारित करें?


15

मैं अपनी साइट की सामग्री को फिर से लिखने के लिए हर मिनट एक नौकरी चलाता हूं।

आज, खोज इंजन की मृत्यु हो गई, और जब मैंने लॉग इन किया तो सैकड़ों अनाथ प्रक्रियाएं थीं जो क्रोन द्वारा शुरू की गई थीं।

क्या किसी अन्य तरह के मौजूदा सॉफ़्टवेयर का उपयोग करने का एक और तरीका है जो मुझे हर मिनट एक नौकरी निष्पादित करने देगा, लेकिन अगर वह नौकरी वापस नहीं आती है, तो दूसरा उदाहरण लॉन्च नहीं किया जाएगा (क्योंकि खोज इंजन प्रक्रिया विफल हो गई है)?


4
क्रॉन सबसे अधिक संभावना वही कर रहे हैं जो आप बता रहे हैं। मैं सुझाव देता हूं कि इसके बजाय बुद्धिमानी से नौकरी का पुनर्लेखन करें।
गपरेंट

जवाबों:


27

समस्या वास्तव में क्रोन के साथ नहीं है - यह आपके काम के साथ है।

आपको कुछ विवरणों के लॉक के साथ अपना काम करने की आवश्यकता होगी। ऐसा करने का सबसे आसान तरीका यह है कि यह एक निर्देशिका बनाने का प्रयास किया जाए और यदि सफल रहा, तो बाहर न निकले। जब आपकी नौकरी समाप्त हो गई है और इसे बाहर निकल गया है तो इसे अगले रन के लिए तैयार निर्देशिका को हटा देना चाहिए। यहाँ एक स्क्रिप्ट का वर्णन है।

#!/bin/bash

function cleanup {
    echo "Cleanup"
    rmdir /tmp/myjob.lck
}

mkdir /tmp/myjob.lck ||  exit 1
trap cleanup EXIT
echo 'Job Running'
sleep  60
exit 0

इसे एक टर्मिनल में चलाएं, 60 सेकंड से पहले इसे दूसरे टर्मिनल में चलाएं, यह स्थिति 1 से बाहर निकल जाएगा। पहली प्रक्रिया से बाहर निकलने के बाद आप इसे दूसरे टर्मिनल से चला सकते हैं ...

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

जैसा कि मैंने सिर्फ झुंड के बारे में सीखा है मैंने सोचा कि मैं इस उत्तर को अपडेट करूंगा। झुंड (1) का उपयोग करने के लिए आसान हो सकता है। इस मामले में flock -nउपयुक्त प्रतीत होगा उदा

* * * * * /usr/bin/flock -n /tmp/myAppLock.lck /path/to/your/job   

हर मिनट अपनी नौकरी चलाएंगे, लेकिन अगर फ़ाइल पर लॉक प्राप्त नहीं कर सका तो विफल हो जाएगा।


2
बेवकूफ सवाल शायद, लेकिन क्या किसी निर्देशिका का उपयोग करने के लिए विशेष रूप से एक नियमित फ़ाइल के बजाय कोई लाभ है?
गपरेंट

9
एक नियमित फ़ाइल का उपयोग करने के लिए कई ऑपरेशन की आवश्यकता होती है, यह देखने के लिए जांचें कि क्या यह मौजूद है, अगर यह तब नहीं बनाता है। यह फ़ाइल बनाने के लिए एक और प्रक्रिया के अवसर की खिड़की छोड़ देता है - गन्दा। Mkdir एक परमाणु ऑपरेशन है जो या तो काम करता है और आपको 'लॉक' मिलता है या यह पहले से मौजूद किसी अन्य प्रक्रिया के रूप में नहीं है।
user9517

समझ में आता है। लॉक डायरेक्टरी पर भी अच्छी सोच। साभार
जॉन

2

एक तरीका यह होगा कि आपकी रीइन्डेक्स स्क्रिप्ट में एक लॉक फाइल बनाई जाए ताकि यह जांचा जा सके कि स्क्रिप्ट पहले से चल रही है या नहीं। आप यह भी देखने के लिए कुछ अपवाद हैंडलिंग में जोड़ सकते हैं कि क्या सर्च इंजन ऊपर और चल रहा है।

एक अधिक शामिल विकल्प यह होगा कि रेसक्यू और रेसक्यू-शेड्यूलर जैसे किसी प्रकार के टास्क क्वेर का उपयोग किया जाए:

https://github.com/blog/542-introducing-resque

https://github.com/bvandenbos/resque-scheduler#readme

वहाँ भी Qu और साइडकीक:

https://github.com/bkeepers/qu

https://github.com/mperham/sidekiq

हां, यह सब रूबी के लिए उन्मुख है, लेकिन आप अपनी पसंद की भाषा में "resque जैसी चीजों" की तलाश कर सकते हैं।


0

इसे जल्दी से सेट अप करने का एक और तरीका है कि एक शेल स्क्रिप्ट शुरू हो जब मशीन शुरू हो जाए (क्रॉन ' @reboot /path/to/my/script.sh' के साथ ऐसा कर सकता है । फिर इसे शुरू करने के लिए क्रोन को फिर से शुरू करें) इसमें कुछ इस तरह से।

#!/bin/sh
/opt/bin/run-site-index
sleep 60
exec $0

स्क्रिप्ट चलती रहती है, और क्या आपने केवल एक शुरू किया है - एक ही बार में कितने चल सकते हैं - इससे अधिक नहीं। इंडेक्सर चल रहा है, और यदि नहीं, तो पुनरारंभ करें, या अन्यथा समस्या के किसी व्यक्ति को ठीक करने / सूचित करने का प्रयास करें।


-3

इसके लिए क्रोन का उपयोग करने के बजाय मैं आपकी नौकरी को एक ऐसी सेवा के रूप में बनाऊंगा जो एक लूप में चलती है और अंतिम चरण के रूप में 60 सेकंड के लिए सोती है, या शायद लोड को फैलाने में मदद करने के लिए प्रक्रिया के दौरान विभिन्न बिंदुओं पर छोटे अंतराल के लिए अधिक बार सोता है। अधिक समान रूप से।


1
यह न तो समस्या को ठीक करेगा और न ही क्रोन से सुधार होगा।
गपरेंट

यह समस्या को ठीक करेगा, क्योंकि तब केवल एक प्रक्रिया होती है जो कभी चलती है। यह पूरी तरह से क्रॉन को साइडस्टेप करेगा।
जोएल कोएल

यदि खोज इंजन चल रहा है तो यह 'सेवा' नहीं दिखता है तो यह समस्या को ठीक नहीं करता है। उनकी पटकथा / नौकरी का तर्क मुद्दा है। संपादित करें: वास्तव में, आप कुछ हद तक सही हैं, यह मुद्दे को बदसूरत तरीके से छिपाएगा।
अपरेंट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.