सिस्टमड: इंस्टेंटिमिटेड सर्विस के सभी इंस्टेंस को एक ही बार में रिस्टार्ट करें


17

मैं systemd की अच्छी सुविधा का उपयोग करता हूं: Instantiated Services।

क्या एक कॉल के साथ सभी तत्काल सेवाओं को फिर से लोड करने का एक सरल तरीका है?

उदाहरण: मैं इस तरह से सब नहीं चलाना चाहता:

systemctl restart autossh@foo
systemctl restart autossh@bar
systemctl restart autossh@blu

मैंने यह कोशिश की, लेकिन यह काम नहीं करता है

systemctl restart autossh@*

संबंधित: एक सिस्टमड सर्विस फ़ाइल के साथ एन प्रक्रिया शुरू करें

अपडेट करें

पहले मैं Instantiated Services से रोमांचित था, लेकिन बाद में मुझे एहसास हुआ कि Ansible जैसे कॉन्फ़िगरेशन प्रबंधन टूल को चलाने से अधिक समझ में आता है। मैंने सीखा: टूल को सरल रखें। कई उपकरण स्थिति-जांच (यदि .. और ...) और लूप को लागू करना शुरू करते हैं। उदाहरण के लिए webservers या mailserver congfiguration। लेकिन इसे एक अलग (ऊपरी) स्तर पर हल किया जाना चाहिए: कॉन्फ़िगरेशन प्रबंधन। देखें: https://github.com/guettli/programming-guidelines#dont-use-systemd-instantiated-units

जवाबों:


23

Systemd (systemd-209 से शुरू) वाइल्डकार्ड का समर्थन करता है, हालांकि आपका शेल संभवतः उन्हें विस्तारित करने की कोशिश कर रहा है। वाइल्डकार्ड्स को systemctl / सेवा कमांड शब्दशः के लिए पास करने के लिए उद्धरणों का उपयोग करें:

systemctl restart 'autossh@*'

मेरे लिए काम नहीं करता है: systemctl status 'autossh@*'आउटपुट: autossh@\x2a.service - ... Active: inactive (dead)संस्करण:systemd 195
guettli

2
ग्लोबिंग से systemd 209 उपलब्ध प्रारंभिक है: lists.freedesktop.org/archives/systemd-devel/2014-February/...
weirdan

यदि आपके पास पुनरारंभ करने के लिए बहुत सारी सेवाएँ हैं, तो guettli के उत्तर में लूप बेहतर काम करेगा, क्योंकि वाइल्डकार्ड उन सभी को एक बार फिर से शुरू करने की कोशिश करता है। ~ 1000 php-fpm सेवाओं के साथ परीक्षण किया गया, लोड 400 तक चला गया और मुझे सर्वर को रिबूट करना पड़ा।
13.5

1
काम करता है अगर प्रक्रियाएं पहले से ही चल रही हैं, लेकिन नहीं अगर उन्हें सक्षम होने के बाद पहली बार शुरू किया जाना है। लेकिन आप systemctl restart autossh@{1..2}(किसी भी एन के बजाय 2) का उपयोग कर सकते हैं जो थोड़ा कम सामान्य है लेकिन यह प्रक्रियाएं भी शुरू कर देगा यदि वे हैं inactive (dead)
giorgiosironi

7

अच्छा नहीं है, लेकिन यह पुराने सिस्टमड के साथ सिस्टम के लिए काम करता है:

systemctl list-units -t service --full| cut -d' ' -f1| grep mypattern | while read s; do systemctl restart $s; done

निश्चित रूप से उपरोक्त उत्तर ( systemctl restart 'autossh@*') से समाधान बेहतर है।


खबरदार: cutसूची-इकाइयों के उत्पादन में विफल सेवाओं के मामले में गलत क्षेत्र को पार्स कर सकते हैं।
Juuso Ohtonen

5

@weirdan उत्तर सही है, लेकिन कुछ वितरणों के लिए कुछ याद कर रहा है।

के लिए Centos 7 और इसी तरह की है, तो आप कर सकते हैं:

systemctl (start|stop|restart|status) my-service@*

यदि आप ध्वज निर्दिष्ट करते हैं, तो BUT, (प्रारंभ) केवल काम करेगा "--all":

systemctl (start) my-service@* --all

अन्यथा, यह सेवाओं को नहीं ढूंढेगा, क्योंकि वे मौजूद नहीं हैं। यह systemd का उद्देश्य फीचर है।

के लिए Ubuntu आधारित सिस्टम, यह बहुत ज्यादा उसी तरह काम करता है, लेकिन अंतर यह है कि "-सभी" झंडा systemctl तर्क के सभी के लिए निर्दिष्ट किया जाना चाहिए, है, अन्यथा यह कुछ नहीं करेंगे।

systemctl (start|stop|restart|status) 'my-service@*' --all

2

मुझे नहीं पता कि यह सिस्टमडाउन के लिए टर्मिनल पर वाइल्डकार्ड का विकल्प है या नहीं। आप जो भी कर सकते हैं, वह आपके सिस्टमड स्क्रिप्ट पर जोड़ रहा है।

% मुझे लगता है कि चाल है, लेकिन जिस तरह से आप त्वरित सेवाओं पटकथा से संबंधित है।

आपको यहां एक विवरण मिल सकता है जिसे निर्दिष्टकर्ता कहा जाता है

जो दिखाता है कि:

% n

पूर्ण इकाई का नाम

% p

तात्कालिक इकाइयों के लिए, यह इकाई नाम के "@" चरित्र से पहले स्ट्रिंग को संदर्भित करता है। गैर-तात्कालिक इकाइयों के लिए, यह निकाय के प्रकार को प्रत्यय के साथ संदर्भित करता है।

%मैं

त्वरित इकाइयों के लिए: यह "@" वर्ण और इकाई name.unit नाम के प्रत्यय के बीच का तार है

मैं सीधे आपके सवाल का जवाब नहीं दे रहा हूं, लेकिन मुझे लगता है कि आप क्या हासिल करने की कोशिश कर रहे हैं। यदि आपको लगता है कि आपका समाधान इस विचार का अनुसरण कर पाया जा सकता है, तो कृपया अपने सिस्टम स्क्रिप्ट को साझा करें, इसलिए हम अंततः उदाहरणों के साथ वर्णन कर सकते हैं और शायद आपको अंतिम स्क्रिप्ट भी प्रदान कर सकते हैं।

यदि आप किसी समाधान तक पहुंचने के लिए अपनी स्वयं की स्क्रिप्ट को संपादित करने में आत्मविश्वास महसूस करते हैं, तो यहां आपके पास एक उदाहरण है (मैं इसे उद्धृत नहीं करूंगा क्योंकि मुझे नहीं पता कि क्या यह समाधान के लिए प्रासंगिक है, और मैं क्या करने के लिए बहुत विशिष्ट है) एम प्रस्ताव)

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