विशिष्ट सेवा के बाद systemd सेवा शुरू करें? [बन्द है]


85

मेरा एक सामान्य सवाल है। *.serviceकिसी विशेष के *.serviceसफलतापूर्वक शुरू होने के बाद कोई सिस्टम यूनिट कैसे शुरू करता है ?

अधिक विशिष्ट प्रश्न यह है कि, मैं शुरू website.serviceहोने के बाद कैसे mongodb.serviceशुरू करूं? दूसरे शब्दों में website.serviceइस पर निर्भर होना चाहिए mongodb.service


1
यह सवाल ServerFault का है, नहीं?
रेमी

1
@ Rémi यह दोनों साइटों पर ठीक है! :)
बेनामी पेंगुइन

2
@AnonymousPenguin नहीं, आपके द्वारा उत्तर दिए जाने के ठीक 3.5 साल पहले, यह SO के लिए ऑन-टॉपिक प्रश्न नहीं था। यह प्रोग्रामिंग के बारे में नहीं है। एसएफ या, बेहतर, यूनिक्स / लिनक्स।एसई कहीं अधिक उपयुक्त होगा।
अंडरस्कोर_ड

स्टैक ओवरफ्लो प्रोग्रामिंग और विकास प्रश्नों के लिए एक साइट है। यह प्रश्न ऑफ़-टॉपिक प्रतीत होता है क्योंकि यह प्रोग्रामिंग या विकास के बारे में नहीं है। देखें किन विषयों मैं यहाँ के बारे में पूछ सकते हैं सहायता केंद्र में। शायद सुपर यूजर या यूनिक्स और लिनक्स स्टैक एक्सचेंज पूछने के लिए बेहतर जगह होगी।
jww

जवाबों:


118

[इकाई] अनुभाग के तहत .service फ़ाइल में:

[Unit]
Description=My Website
After=syslog.target network.target mongodb.service

महत्वपूर्ण हिस्सा है mongodb.service

हालांकि मैनपेज इसका वर्णन करता है लेकिन प्रारूपण के कारण यह पहली नजर में उतना स्पष्ट नहीं है

systemd.unit - अच्छी तरह से स्वरूपित

systemd.unit - इतनी अच्छी तरह से स्वरूपित नहीं है


1
हमारी mongod सेवा एक बहुत बड़े डेटाबेस को शुरू करती है। बाद की सेवा सही ढंग से शुरू नहीं होती है क्योंकि ऐसा लगता है कि मानगो को शुरू होने के बाद डेटाबेस को लोड करने में अधिक समय लगता है। इसलिए हमारी दूसरी सेवा शुरू होती है, लेकिन विफल रहती है क्योंकि मोंगो सफलतापूर्वक शुरू हो गया है लेकिन डेटाबेस लोड नहीं हुआ है। शायद एक देरी मदद कर सकती है ...
wayofthefuture

क्या स्कैन्डेरियो को संभालना सिस्टमड सर्विस के लिए संभव है। कॉन्सलर मल्टीपल सर्विसेस A, B, C, D। यदि A मौजूद है, तो मैं B, C, D को केवल A के बाद शुरू करना चाहता हूं यदि A में कोई B, C, D मौजूद नहीं है, तो किसी भी क्रम में शुरू हो सकता है। कृपया मदद
achilles

@achilles क्या आप उन सिस्टम पर एक नकली सेवा A बना सकते हैं जहाँ A की आवश्यकता नहीं है। उस तरह से बी, सी, डी की निर्भरता को सरल रखा जा सकता है।
वाल्टर ए

50

After=निर्भरता केवल तब प्रभावी होती है जब सेवा सहित After=और आपके द्वारा शामिल की गई सेवा After=आपके बूट अप के हिस्से के रूप में शुरू होने वाली हो।

Ex:

a.service
[Unit]
After=b.service

इस तरह, दोनों अगर a.serviceऔर b.serviceकर रहे हैं सक्षम है, तो systemd इच्छा आदेश b.serviceके बाद a.service

अगर मुझे गलतफहमी नहीं है, तो आप जो पूछ रहे हैं, वह यह है कि कैसे शुरू किया b.serviceजाए, a.serviceभले ही b.serviceवह सक्षम न हो।

इसके लिए निर्देश निम्न Wants=या Requires=नीचे है [Unit]

website.service
[Unit]
Wants=mongodb.service
After=mongodb.service

के बीच का अंतर Wants=और Requires=उस के साथ है Requires=, शुरू करने के लिए एक विफलता b.serviceके स्टार्टअप कारण होगा a.serviceविफल है, जबकि साथ Wants=, a.serviceशुरू कर देंगे, भले ही b.serviceविफल रहता है। के मैन पेज.unit पर इसके बारे में विस्तार से बताया गया है


8
मेरा मानना ​​है कि सच्चाई इस उत्तर के बिल्कुल विपरीत है। After=website.service"website.service के बाद मेरी यूनिट को निष्पादित करें!"। डॉक्स में यही बताया गया है: "After = यह सुनिश्चित करता है कि कॉन्फ़िगर की गई यूनिट को सूचीबद्ध यूनिट के शुरू होने के बाद शुरू किया गया है" । मैं मान रहा हूँ कि "सूचीबद्ध इकाइयाँ" "After =" के दाहिने हाथ की ओर इकाइयाँ हैं।
सिंदूर

"इस तरह, यदि a.service और b.service दोनों सक्षम हैं, तो system..service के बाद b.service को आदेश देगा।" क्या आपका मतलब दूसरे तरीके से नहीं है? swap(a, b)
मतीन उल्हाक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.