सिस्टमड में एक प्रक्रिया को रोकने और शुरू करने के बीच देरी जोड़ना


10

मैं एक बहुत ही अजीब मुद्दा है systemd। जब मैं systemctl restartइसे जारी करता हूं तो यह पिछले एक खत्म होने से पहले नई प्रक्रिया शुरू कर देगा।

यह लॉग में देखा जा सकता है, जहां स्टार्टअप संदेश ("शुरुआती लॉग") के बाद अंतिम शटडाउन संदेश ("समापन लॉग") लॉग होता है।

क्या स्टॉप और प्रक्रिया की शुरुआत के बीच देरी को जोड़ने का कोई तरीका है?


कुछ भी नहीं चलने से रोक रहा हैsystemctl stop myservice && sleep 3 && systemctl start myservice
— don_crissti

क्यों अजीब है? यह वास्तविक दुनिया के मुद्दों के आसपास काम करने के लिए आपको अकेला छोड़ने के लिए एक डिज़ाइन सुविधा है। अपनी इकाई प्रारंभ में नींद को इंजेक्ट करें या पुराने उदाहरण को पूरी तरह से समाप्त करने के लिए एक ExecPre स्थिति का उपयोग करें।
— फ्लोरियन हीगल

जवाबों:


13

आपके सिस्टमड सर्विस फाइलों में, आप रिस्टार्ट के लिए देरी जोड़ने के लिए RestartSec विकल्प सेट कर सकते हैं। नीचे उदाहरण देखें:

[Service]
Restart=always
RestartSec=30

अधिक उदाहरणों के लिए इस लिंक को देखें ।


1
afaik RestartSecकेवल Restart=निर्देश के साथ कॉन्फ़िगर की गई सेवाओं पर लागू होता है और systemctl restart someservice
— don_crissti

1

RestartSec का उपयोग केवल तभी किया जाता है यदि उस विशेष सेवा को सिस्टमटार्ट पुनरारंभ कमांड के माध्यम से पुनरारंभ किया जा रहा है।

उदाहरण के लिए, मेरी दो सेवाएं हैं, ए और बी।

[Unit]
Requires=network-online.target
[Service]
ExecStart=A-stuff
Restart=always

तथा

[Unit]
Requires=A.service
After=A.service
[Service]
ExecStart=B-stuff
Restart=always
RestartSec=30

यदि आप एक Systemctl पुनरारंभ B करते हैं, तो यह अपेक्षा के अनुसार काम करता है ... लेकिन यदि आप एक Systemctl पुनरारंभ A करते हैं, तो दोनों सेवाएं रोक दी जाती हैं और तुरंत बिना किसी देरी के फिर से शुरू कर दिया जाता है।

सिस्टमड स्पष्ट रूप से केवल आपके द्वारा निर्दिष्ट एक सेवा के लिए कॉन्फ़िगरेशन मूल्यों का उपयोग कर रहा है, और किसी भी निर्भरता के लिए उन्हें अनदेखा कर रहा है।

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

आप शायद ए के साथ विलंब को जोड़कर इसके चारों ओर काम कर सकते हैं, लेकिन आपको ऐसा करने की आवश्यकता नहीं है, क्योंकि यह बी के बारे में ए पता करके ऑब्जेक्ट अलगाव को तोड़ता है जब यह निर्भरता नहीं है।

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