बुनियादी upstart स्क्रिप्ट को systemd पर माइग्रेट करें


17

मैंने अभी Ubuntu १४.१० से १५.०४ तक एक सर्वर को अपग्रेड किया है, और कस्टम अपस्टार्ट स्क्रिप्ट के माध्यम से शुरू होने वाली कुछ सेवाएं अब नहीं चल रही हैं।

मेरी समझ यह है कि मुझे उन्हें systemdसेवाओं के रूप में फिर से लिखने की आवश्यकता है , लेकिन पूरी systemdप्रणाली को रात भर सीखने का विचार थोड़ा कठिन है।

अपस्टार्ट स्क्रिप्ट बस autosshस्टार्टअप पर लॉन्च होती है , और मेरे पास कुछ अन्य समान स्क्रिप्ट हैं जो लंबे समय तक चलने वाली प्रक्रियाओं को लॉन्च करते हैं।

#/etc/init/autossh.conf

description "Maintain a permanent SSH tunnel to <other_server>"

start on started mountall
stop on shutdown

exec autossh -N other_server

मैं इसे systemdसेवा के रूप में फिर से कैसे लिख सकता हूं ?


3
उपस्टार्ट उपयोगकर्ताओं के लिए Systemd एक अच्छा प्रारंभिक बिंदु है।
मूरू

जवाबों:


13

सिस्टमड में माइग्रेट करने का पहला नियम

इस बिंदु पर, 2015 में, यह सबसे अधिक संभावना है कि किसी ने पहले ही कर दिया है।

systemd लगभग कुछ वर्षों से है। और यूनिट फाइलों को लिखने और उन्हें प्रकाशित करने वाले लोगों का एक पूरा कुटीर उद्योग रहा है। GitHub, विशेष रूप से, सेवा इकाइयों के संग्रह के भंडार को आकर्षित करता है।

वास्तव में autossh.service(एक वाक्यांश के रूप में) के लिए WWW खोज :

एक टेम्पलेट इकाई

कहा कि, जैसा कि मैंने अकेले StackExchange पर कई स्थानों पर इंगित किया है, इस प्रकार का प्रवासन एक यंत्रवत प्रक्रिया नहीं है, और कभी-कभी केवल एक इकाई फ़ाइल में जो कुछ भी है उससे रोबोटिक अनुवाद करना गलत तरीके से, या कम से कम खराब काम कर रहा है। इस मामले में, autosshएक टेम्पलेट इकाई के साथ संभाले जाने के लिए सकारात्मक रूप से पुताई की जाती है , कि इसे वास्तविक सेवा इकाइयों में लक्षित नाम से परिचालित किया जाता है। तो /etc/systemd/system/autossh@.service, के रूप में:

[यूनिट]
विवरण =% i से रिवर्स सुरंग के लिए ऑटोएसएसएच सेवा 
= Network.target के बाद

[सेवा]
उपयोगकर्ता = autossh
EnvironmentFile = / etc /% पी /% i.conf
ExecStart = / usr / bin / autossh -M 0 -q -N $ SSH_USER @% i $ SSH_OPTIONS

[इंस्टॉल]
WantedBy = multi-user.target

/etc/autossh/other_server.example.confन्यूनतम नाम से एक फ़ाइल बनाएँ :

SSH_USER = जो

सभी सामान्य नियंत्रण तब लागू होते हैं:

  • systemctl enable autossh@other_server.example - एक उदाहरण को बूटस्ट्रैप पर स्वचालित रूप से शुरू करने के लिए सक्षम करें।
  • systemctl start autossh@other_server.example - उस उदाहरण को तुरंत शुरू करें।
  • systemctl status autossh@other_server.example - इसकी स्थिति देखें।

और हाँ, पहला नियम इस पर भी लागू होता है। खोज करना, एक पा सकता है कि मुझे इस पर पीटा गया था, सिर्फ एक पखवाड़े के भीतर, ओपनसैज में ग्रेग फ्रीमीयर द्वारा।


धन्यवाद - मैं कुछ इसी तरह के साथ आया था, लेकिन मैं 'टेम्पलेट इकाइयों' के विचार के बारे में पता नहीं था
14

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