linux shell, निर्दिष्ट समय के लिए कार्य को जीवित रखें


4

मैं एक निर्दिष्ट समय (सेकंड में) के लिए किसी कार्य को जीवित रखने (यदि आवश्यक हो तो पुनः आरंभ करने) के लिए देख रहा हूं, और फिर इसे मारकर बंद कर दूंगा उदाहरण के लिए: keep_for 3600 rsync foo bar:faz एक निर्देशिका (f.e. गिरा कनेक्शन के मामले में rsync को पुनरारंभ करना) को सिंक्रनाइज़ करने का प्रयास करना चाहिए, लेकिन स्पष्ट रूप से rsync को मारें और एक घंटे के बाद इसे रोकें।

मैंने उसके लिए एक शेल स्क्रिप्ट लिखने की कोशिश की, लेकिन बहुत सारे किनारे वाले मामलों (जैसे बच्चे की प्रक्रिया नहीं हो रही है, या शेल से बचने के मामले) के साथ लिखना आश्चर्यजनक रूप से कठिन था। तो ... शायद वहाँ पहले से ही उस के लिए एक उपकरण है?

जवाबों:


3

अगर आपका सिस्टम है कल का नवाब , आप एक बना सकते हैं आयोजन अपनी स्क्रिप्ट / कमांड के लिए फाइल करें और यह हो सकता है वह करें जो आप चाहते हैं (यदि अभी नहीं तो संभवतः भविष्य के संस्करण में उपयोग करें नियोजित सुविधाएँ )।

यहाँ कुछ जानकारी के बिट्स हैं events(5) आदमी पृष्ठ:

  • मैनुअल शुरुआत:

    & lt; इवेंट & gt;
    इस काम को शुरू करने के लिए किस शर्त पर वर्णन करता है। बिना इसके   अनुभाग, नौकरी केवल मैन्युअल रूप से शुरू की जा सकती है   initctl (8) कमांड।

  • respawn:

    respawn
    यह नौकरी के लिए डेमॉन, सर्विस और रिस्पांस फ्लैग सेट करता है।   रिस्पॉन्स फ्लैग का मतलब है कि प्रक्रिया को फिर से शुरू किया जाएगा   खत्म होता है

  • प्रतिक्रिया की सीमा:

    रिस्पॉन्स लिमिट [काउंट [टाइमआउट]]
    यह रिस्पना सीमा को कॉन्फ़िगर करता है। रेस्पॉन्स की सीमा केवल लागू होती है   यदि जॉब के लिए रिस्पांस फ्लैग सेट किया गया है; एक सीमा तय करना   स्वचालित रूप से श्वसन क्षमता निर्धारित नहीं करता है। अगर द   प्रक्रिया एक बार के भीतर गिनती से अधिक बार प्रतिक्रिया व्यक्त की है   समय समाप्त सेकंड के अंतराल, नौकरी बंद कर दिया जाएगा   स्वचालित रूप से, और पुनः आरंभ नहीं किया गया। सीमा 10 तक डिफॉल्ट करती है   5 सेकंड के भीतर समय।

देख शुरू करना


यदि मैं मैनुअल को सही ढंग से समझता हूं, तो यह एक नियोजित विशेषता है ... मुझे भी लगता है कि एक तदर्थ आदेश के लिए यह थोड़ा बड़ा है :-) फिर भी, सुझाव के लिए धन्यवाद।
liori

0

मैं उन्हें एक ही स्क्रिप्ट में रखते हुए कार्यों को अलग करूँगा (मैंने इसे C प्रोग्राम के रूप में सोचा था, लेकिन यह स्क्रिप्ट के रूप में उल्लेखनीय होना चाहिए)

मैं टाइमआउट पर एक संकेत भेजने के लिए एक पृष्ठभूमि उपप्रकार टाइमर के साथ शुरू करूँगा। सिग्नल हैंडलर सब कुछ साफ सफाई से बाहर निकालता है और बाहर निकालता है।

फिर एक लूप शुरू करें जो वांछित कमांड को रिस्पॉन्स करता है जब भी वह सफलता (शून्य) स्थिति के बिना बाहर निकलता है।

एक ही लूप में टाइमआउट और कमांड दोनों का ट्रैक रखने की कोशिश अत्यधिक जटिल हो जाएगी।


1
अगर मैं एक स्क्रिप्ट लिखना चाहता था, तो मैं स्टैकओवरफ्लो पर पूछता हूं। यहां मैं सिर्फ एक तैयार समाधान की तलाश में हूं।
liori

-1

यह प्रश्न एक कार्यान्वयन के संदर्भ में प्रस्तुत किया गया है। मैं आपको यह सुझाव देता हूं कि आप इसे पूरा करने के संदर्भ में जो आप अधिक स्पष्ट (और सुरुचिपूर्ण) समाधान निकाल सकते हैं।


मैं एक निश्चित समय के लिए एक प्रक्रिया का जवाब देने के लिए एक सामान्य मजबूत उपकरण की तलाश कर रहा हूं, और फिर कुछ समय बाद इसे जबरदस्ती बंद करने के लिए। फ़ाइल डाउनलोड करना / अपलोड करना और मोलर का उपयोग करके इंटरनेट रेडियो चलाना मेरे सामान्य उपयोग के मामले हैं, लेकिन मेरे पास अक्सर अलग-अलग कार्य होते हैं जिन्हें एक विशिष्ट समय विंडो में करना होता है। दोनों rsync तथा mplayer कनेक्शन विराम होने पर रुकें, इसलिए मैं चाहता हूं कि उन्हें पुनः आरंभ किया जाए। बस इतना ही।
liori
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.