Fstab माउंट के बाद निष्पादित करने के लिए systemd सेवा सेट करें


33

मैं एक ऐसी systemd .serviceस्क्रिप्ट पर काम कर रहा हूं , जिसे बूट-अप के माध्यम से CIFS नेटवर्क स्थान पर माउंट किए जाने के बाद शुरू करना चाहिए ।/etc/fstab/mnt/

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

/etc/systemd/system/my-daemon.service :

[Unit]
Description=Launch My Daemon
After=network.target vpn-launch.service
Requires=vpn-launch.service

मैंने systemd.mountलाइन में जोड़ने की कोशिश की :, After=network.target vpn-launch.service systemd.mountलेकिन इसने उन परिणामों को नहीं दिया जिनकी मैं उम्मीद कर रहा था।


यदि आप systemd-remount-fsअपनी Afterसूची में जोड़ते हैं तो क्या यह काम करता है ?
एरिक रेनॉफ

जवाबों:


40

एक CIFS नेटवर्क स्थान के माध्यम से लगाया गया है /etc/fstabकरने के लिए /mnt/बूट-अप पर।

नहीं ऐसा नहीं है। यह अधिकार प्राप्त करें, और बाकी जगह स्वाभाविक रूप से गिर जाता है।

माउंट को एक (उत्पन्न) सिस्टमड माउंट यूनिट द्वारा नियंत्रित किया जाता है जिसे कुछ इस तरह नामित किया जाएगा mnt-wibble.mount। आप systemctl list-units --type=mountकमांड के आउटपुट में इसका वास्तविक नाम देख सकते हैं । आप इसे किसी भी अन्य इकाई की तरह विस्तार से देख सकते हैं systemctl status

बहुत सरलता से, फिर: आपको अपनी इकाई को उस माउंट इकाई के चालू होने के बाद शुरू करने का आदेश देना होगा।

के बाद = network.target vpn-launch.service mnt-wibble.mount

आगे की पढाई


10
"सिस्टमैक्टल लिस्ट-यूनिट्स - टाइप = माउंट" के साथ सूची आरोह
nijave

अनुयायियों के लिए, "वाइबल" सिर्फ एक डमी नाम है, जैसे "
फोब्बर

17

क्षमा करें, लेकिन मैं अभी तक टिप्पणी नहीं कर सकता।

जेडीबीपी ने कहा, आपको फाइलसिस्टम माउंट पर ऑर्डर करना चाहिए। आप माउंट इकाई के नाम की भविष्यवाणी कर सकते हैं या, वैकल्पिक रूप से, आप (इकाई अनुभाग में) का उपयोग कर सकते हैं:

RequiresMountsFor = / पूर्ण / path / के / माउंट

यह विकल्प सेवा शुरू करने से पहले पथ को सुगम बनाने के लिए उपयुक्त * .mount इकाइयों के लिए निर्भरता बनाता है। यह सभी सिस्टमड संस्करण पर नहीं हो सकता है, लेकिन मैं पिछले 6 महीने या तो इसे CentOS 7 मशीन में उपयोग कर रहा हूं।


(और वेनिला सिस्टमड से आपके मतभेद यहां हैं ।) RequiresMountsFor=अपने स्वयं के सेट के साथ आता है। साथ RedHat बग # 1088057 और क्रिस Siebenmann हाथ में है, तो आप जवाब देने के लिए सक्षम होना चाहिए superuser.com/questions/988734 । यह इस सवाल में भी एक CIFS माउंट है। लेकिन निहितार्थ यह है कि यह autoसौभाग्य से है।
JdeBP

@JdeBP टिप्पणी के लिए धन्यवाद। मुझे उस सुविधा पर कैविएट और मुद्दों की जानकारी नहीं थी।
मिगेलबर्नाडी

14

यद्यपि दोनों उत्तर सही हैं, मैं अपने दो सेंट को चर्चा में जोड़ना चाहता हूं, क्योंकि जब मैंने इसकी तलाश की है तो मुझे कुछ निर्देश और उदाहरण याद आ रहे थे कि कैसे आगे बढ़ना है।

  1. करने के लिए filesystem जोड़ें /etc/fstab
  2. टाइप करें mount -aजो fstab में उल्लिखित सभी फाइल सिस्टम को मापता है
  3. उस सिस्टम यूनिट को देखें जो इसके साथ उत्पन्न हुई है:

    systemctl list-units | grep '/path/to/mount' | awk '{ print $1 }'

    (कुछ ऐसा होना चाहिए जो समाप्त हो जाए .mount)
  4. फाइल After=में स्टेट माउंट-यूनिट को स्टेटमेंट में जोड़ें*.service

यहां my-daemonबूट पर सेवा शुरू करने का एक उदाहरण है, लेकिन नेटवर्क तैयार होने के बाद, एक CIFS शेयर चालू है /mnt/cifs, और vpn-launchसेवा शुरू हो गई है:

/ Etc / fstab

//servername/sharename /mnt/cifs cifs defaults,some,other,options 0 0

नोट: आप nofailअपने fstab विकल्पों में जोड़ना चाह सकते हैं (जैसे कि बाहरी ड्राइव का उपयोग करते समय)। यदि डिवाइस कनेक्ट नहीं है, तो अन्यथा, आपकी मशीन बूट नहीं होगी। देखें ArchWiki का fstab लेख


/etc/systemd/system/my-daemon.service

[Unit]
Description=Launch My Daemon
Requires=vpn-launch.service mnt-cifs.mount
After=network.target vpn-launch.service mnt-cifs.mount

[Service]
ExecStart=/path/to/my-daemon

[Install]
WantedBy=multi-user.target

सेवा को इस तरह से सक्षम करना न भूलें कि यह बूट पर शुरू की गई है: systemctl enable my-daemon

ध्यान दें कि यह अन्य फाइल सिस्टम (NFS, HDDs, आदि) के लिए भी काम करता है।

जैसा कि पहले ही उल्लेख किया गया है, दोनों उत्तर सही हैं और मैं सभी को उन्हें पढ़ने के लिए प्रोत्साहित करता हूं लेकिन मेरे लिए कुछ उदाहरणों ने मुझे कुछ समय बचाया होगा।

अपडेट (2019-06-25):

  • बाहरी ड्राइव का उपयोग करते समय बूट लॉक को रोकने के लिए fstab विकल्पों के संबंध में एक नोट जोड़ा गया
  • mnt-cifs.mountउस Requires=सूची में जोड़ा गया जो my-daemon.serviceअसफलता का कारण बनता है जब cifs माउंट सफलतापूर्वक माउंट नहीं किया गया था

बस स्पष्ट होने के लिए, "mnt-cifs.mount" आपके विशिष्ट माउंट-पॉइंट के लिए माउंट यूनिट का नाम है systemctl list-units --type=mount?
smdvlpr

1

@ bm-bergmotte: आपके निर्देश के लिए धन्यवाद जिसने मुझे बहुत मदद की। मेरे लिए यह सिर्फ काम कर रहा है, अगर मैं डालूं

After=network.target vpn-launch.service mnt-cifs.mount
Requires=vpn-launch.service mnt-cifs.mount

अगर मैं "आवश्यक" (और इस क्रम में) के अंदर "mnt-cifs.mount" नहीं डालता हूं, तो यह रिबूट / स्टार्टअप के लिए काम करता है, लेकिन सेवा वैसे भी शुरू होती है, अगर डिवाइस माउंट नहीं है। अतिरिक्त रूप से इसे "" आवश्यक "" के अंदर डालने के बाद, सेवा प्रारंभ होने से पहले डिवाइस को माउंट करता है, अगर डिवाइस माउंट नहीं किया गया था।


तुम सही हो। यदि माउंट विफल हो जाता है तो my-daemon.service वैसे भी शुरू हो जाती है। After=सिर्फ हुक्म चलाता है। Requires=यह अनिवार्य करता है कि सीआईएफ माउंट मौजूद होना चाहिए ( उस एक पर सूफियान घोरी का जवाब देखें )। मैं अपना जवाब अपडेट करूंगा।
bm-bergmotte
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.