StartLimitInterval के बाद सिस्टमड सेवा स्वचालित पुनरारंभ


33

मैं चाहता हूं कि विफलता पर मेरी सिस्टमड सेवा अपने आप फिर से चालू हो जाए। इसके अतिरिक्त मैं पुनरारंभ को सीमित करना चाहता हूं। मैं 90 सेकंड की अवधि के भीतर अधिकतम 3 पुनरारंभ करना चाहता हूं। इसलिए मैंने निम्नलिखित विन्यास किया है।

[सेवा]
पुनः आरंभ करें = हमेशा
StartLimitInterval = ९ ०
StartLimitBurst = ३

अब विफलता पर सेवा को फिर से शुरू किया जाता है। 3 त्वरित विफलताओं / पुनरारंभ होने के बाद यह अपेक्षा के अनुरूप अब पुनरारंभ नहीं हो रहा है। अब मुझे उम्मीद है कि टाइमआउट (StartLimitInterval) के बाद सिस्टम को सेवा शुरू करनी होगी। लेकिन सिस्टमआउट स्वचालित रूप से टाइमआउट (90sec) के बाद सेवा शुरू नहीं कर रहा है, अगर मैं मैन्युअल रूप से उस टाइमआउट के बाद सेवा को पुनरारंभ कर रहा हूं जो काम कर रहा है। लेकिन मैं चाहता हूं कि StartLimitInterval के बाद सिस्टम अपने आप सर्विस शुरू कर दे। कृपया मुझे बताएं कि यह सुविधा कैसे प्राप्त करें।


3
मैंने एक लेख लिखा था जो बताता है कि एक सेवा कैसे बनाई जाए, और इस विशेष मुद्दे से कैसे बचा जाए: systemd के साथ लिनक्स सेवा बनाना
बेंजामिन

2
मुझे लगता है कि आप ढूंढ रहे हैं StartLimitIntervalSec, नहीं StartLimitInterval
मार्क टामस्की

जवाबों:


30

90 सेकंड के अंतराल पर 3 बार सेवा पुनरारंभ करने के लिए अपने सिस्टमड सर्विस फ़ाइल में निम्न पंक्तियाँ शामिल करें:

Restart=always
RestartSec=90
StartLimitInterval=400
StartLimitBurst=3

इसने मेरे लिए एक ऐसी सेवा के लिए काम किया जो 'टाइप = निष्क्रिय' का उपयोग करके एक स्क्रिप्ट चलाती है। ध्यान दें कि 'StartLimitInterval' 'RestartSec * StartLimitBurst' से अधिक होना चाहिए अन्यथा सेवा अनिश्चित काल के लिए फिर से शुरू हो जाएगी।

मुझे बहुत समय तक परीक्षण और त्रुटि के साथ काम करने में कुछ समय लगा, कि सिस्टमड इन विकल्पों का उपयोग कैसे करता है, जो बताता है कि सिस्टमड उतना प्रलेखित नहीं है जितना कोई उम्मीद करेगा। ये विकल्प प्रभावी रूप से रीट्री साइकिल का समय और अधिकतम रिट्रीमेंट प्रदान करते हैं जिसकी मुझे तलाश थी।


इसे स्वीकृत उत्तर के रूप में चिह्नित किया जाना चाहिए ...
जेफ

StartLimitInterval=मेरे नवीनतम ubuntu 18 में निर्देश नहीं मिल सकता है ...
wick

10

आपके द्वारा वर्णित व्यवहार प्रलेखन के अनुरूप है:

StartLimitInterval =, StartLimitBurst = सेवा प्रारंभ दर सीमित करना। डिफ़ॉल्ट रूप से, 10 सेकंड के भीतर 5 बार से अधिक शुरू की जाने वाली सेवाओं को 10 सेकंड के अंतराल समाप्त होने तक किसी भी अधिक बार शुरू करने की अनुमति नहीं है। इन दो विकल्पों के साथ, इस दर को सीमित किया जा सकता है। CheckLimitInterval = का उपयोग करें। चेकिंग अंतराल को कॉन्फ़िगर करने के लिए (डिफ़ॉल्ट रूप से DefaultStartLimitInterval = प्रबंधक कॉन्फ़िगरेशन फ़ाइल में, किसी भी प्रकार की दर सीमित करने के लिए 0 पर सेट)। StartLimitBurst = का उपयोग करके कॉन्फ़िगर करें कि कितने अंतराल प्रति अंतराल की अनुमति है (डिफ़ॉल्ट डिफ़ॉल्ट रूप से प्रबंधक फ़ाइल में डिफ़ॉल्ट)। ये कॉन्फ़िगरेशन विकल्प रिस्टार्ट = के साथ संयोजन के रूप में विशेष रूप से उपयोगी हैं; हालाँकि, वे सभी प्रकार के प्रारंभों (मैनुअल सहित) पर लागू होते हैं, न कि केवल रीस्टार्ट = तर्क द्वारा ट्रिगर किए गए।ध्यान दें कि रिस्टार्ट = के लिए कॉन्फ़िगर की गई इकाइयाँ और जो शुरू की सीमा तक पहुँचती हैं, उन्हें फिर से शुरू करने का प्रयास नहीं किया जाता है; हालाँकि, उन्हें अभी भी बाद में मैन्युअल रूप से फिर से शुरू किया जा सकता है, जिस बिंदु से, पुनः आरंभ करने वाला तर्क फिर से सक्रिय हो जाता है। ध्यान दें कि systemctl रीसेट-विफल होने के कारण सेवा के लिए पुनरारंभ दर काउंटर फ़्लश हो जाएगा, जो कि उपयोगी है यदि व्यवस्थापक मैन्युअल रूप से एक सेवा शुरू करना चाहता है और प्रारंभ सीमा उसके साथ हस्तक्षेप करती है।

मैं अभी भी अपने आप को आपके व्यवहार की इच्छा को पूरा करने के तरीके का पता लगाने की कोशिश कर रहा हूं।


यह एक उत्तर की तुलना में अधिक टिप्पणी है जैसा कि आप बताते हैं।
डेव एम

वास्तव में मुझे क्या चाहिए, ty
कुछ लिनक्स Nerd

आपके द्वारा लिंक किए गए दस्तावेज़ के अनुसार, क्या यह StartLimitIntervalSec=(और DefaultStartLimitIntervalSec=) नहीं होना चाहिए ? Secदोनों पैरामीटर नामों के अतिरिक्त पर ध्यान दें ।
डॉकटोर जे

6

कुछ वर्षों बाद और सिस्टमड 232 के साथ यह सवाल के अनुसार और 2016 के उत्तर में काम नहीं किया। विकल्प का नाम StartLimitIntervalSecऔर अनुभाग भी बदल गए हैं। अब इस उदाहरण को देखना होगा:

[Unit]
StartLimitBurst=5
StartLimitIntervalSec=33

[Service]
Restart=always
RestartSec=5
ExecStart=/bin/sleep 6

यह 30 सेकंड में 5 पुनरारंभ (5 * 6) और 33 सेकंड में एक पुनरारंभ होगा। इसलिए हमारे पास 33 सेकंड में 6 रीस्टार्ट हैं। यह 33 सेकंड में 5 पुनरारंभ की सीमा से अधिक है। तो पुनः आरंभ लगभग 31 सेकंड के बाद 5 मायने में बंद हो जाएगा।


1
ऐसा लगता है StartLimitIntervalकि अभी भी समर्थन किया गया है, यदि Serviceअनुभाग में यह अनिर्दिष्ट है। लेकिन नया, पसंदीदा StartLimitIntervalSecकाम करता है Unit
दानेक डुवैल

1

OnFailureयह विफल होने पर आप दूसरी सेवा शुरू करने के लिए सेट कर सकते हैं । में ऑन-असफल सेवा आपको लगता है कि प्रतीक्षा करता है एक स्क्रिप्ट चला सकते हैं और फिर अपने सेवा पुन: प्रारंभ होता।

यह कैसे सेट अप करने के लिए यूनिट विफलता पर Systemd स्थिति मेल देखें और इसके बजाय सेवा को पुनरारंभ करने के लिए इसे संशोधित करने के लिए एक नमूना के लिए ।


1

आप उपयोग कर सकते हैं StartLimitAction=reboot। यह StartLimitInterval के बाद सिस्टम को रीबूट करेगा।

StartLimitAction = StartLimitInterval = और StartLimitBurst = के साथ कॉन्फ़िगर की गई दर सीमा हिट होने पर कार्रवाई को कॉन्फ़िगर करें। रिबूट, रिबूट-बल, या रिबूट-तत्काल में से कोई भी नहीं लेता है। यदि कोई भी सेट नहीं किया गया है, तो दर सीमा को मारने से कोई कार्रवाई नहीं होगी इसके अलावा प्रारंभ की अनुमति नहीं होगी। रिबूट सामान्य शटडाउन प्रक्रिया (यानी सिस्टेक्टल रिबूट के बराबर) के बाद रिबूट का कारण बनता है। रिबूट-बल एक जबरन रिबूट का कारण बनता है, जो सभी प्रक्रियाओं को जबरन समाप्त कर देगा, लेकिन रिबूट पर कोई गंदा फाइल सिस्टम नहीं होना चाहिए (यानी सिस्टेक्टल रिबूट -फ के बराबर) और रिबूट-तत्काल रीबूट (2) सिस्टम कॉल के तत्काल निष्पादन का कारण बनता है, जिसके परिणामस्वरूप हो सकता है डेटा हानि में। कोई नहीं करने के लिए चूक।

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