पैकेज स्थापना के दौरान आश्रित सेवाओं को पुनः आरंभ करने का सही तरीका क्या है?


10

मैं एक कॉन्फ़िगरेशन पैकेज बना रहा हूं, और उन सेवाओं को रोकना और पुनः आरंभ करना चाहूंगा जिनका कॉन्फ़िगरेशन प्रभावित है। अभी मैं उपयोग कर रहा हूँ service [stop|restart]में {pre,post}{inst,rm}जिस तरह से। मैं कहीं एक प्रश्न में पढ़ता हूं invoke-rc.dजो सही तरीका है, क्योंकि यह किसी सेवा के बारे में उपयोगकर्ता की प्राथमिकताओं का सम्मान करता है। हालाँकि, मुझे इसके बारे में कोई दिशानिर्देश नहीं मिला। क्या किसी को इस तरह के दिशानिर्देशों का पता है? या कोई सलाह है कि मुझे किस तरीके से चुनना चाहिए? पैकेज आंतरिक उपयोग का है, और संभवतः अगले दो वर्षों के लिए केवल 14.04 के लिए होगा। हालाँकि, मैं अपने उत्तराधिकारी के लिए जितना संभव हो एक राज्य को साफ करना चाहता हूं, systemdउतना ही मेरे दिमाग में भी है।

से invoke-rc.dआदमी पेज :

डेबियन पैकेजों के अनुरक्षक लिपियों द्वारा init लिपियों की सभी पहुंच आह्वान के माध्यम से की जानी चाहिए ।

डेबियन पॉलिसी मैनुअल, अध्याय 9, धारा 3.3 से :

रखरखावकर्ताओं को अपने संकुल की स्क्रिप्ट जैसे पोस्टस्टीन, प्रर्म और पोस्ट्रम में इनस्क्रिप्ट से निपटने के लिए अपडेट- rc.d और इनवोक- rc.d कार्यक्रमों द्वारा प्रदान की गई अमूर्त परत का उपयोग करना चाहिए।

...

पैकेज अनुचर लिपियों को सीधे कॉल करने के बजाय, /etc/init.d/* इनस्क्रिप्ट में आह्वान करने के लिए इनवोक-आरओआरडी का उपयोग करना चाहिए।

डेबियन का उपयोग किया गया है sysv-initऔर सीधे इसमें शिफ्ट हो जाएगा systemd, और मुझे लगता है कि पॉलिसी मैनुअल को संदर्भित करने के लिए नियत समय में अपडेट किया जाएगा systemctl। हालाँकि, मैं इस बारे में अनिश्चित हूं: क्या मुझे invoke-rc.dइसके बजाय उपयोग करना चाहिए service? मैं बता सकता हूं dpkgकि मुझे कुछ फ़ाइलों (ट्रिगर्स के माध्यम से) में दिलचस्पी है, इसलिए क्या यह बताने का कोई तरीका है dpkgकि मैं कुछ सेवाओं में भी दिलचस्पी रखता हूं और dpkgरीस्टार्टिंग / रीलोडिंग करना चाहता हूं?

स्पष्ट करने के लिए: मैं init स्क्रिप्ट नहीं लिख रहा हूं। मैं अन्य अनुप्रयोगों, जैसे कठपुतली, NTP, आदि के लिए कॉन्फ़िगरेशन के साथ एक पैकेज प्रदान कर रहा हूं, इसलिए मैं स्क्रिप्ट्स में संबंधित सेवाओं को बंद और पुनः आरंभ करता हूं।

यहाँ , उदाहरण के लिए, invoke-rc.dबनाम के बारे में एक डॉकर मुद्दा है service। मुद्दा अभी भी खुला है, एक व्यक्ति के साथ, शायद एक अनुचर, टिप्पणी करते हुए कि वे निश्चित रूप से इसे सही तरीके से करने में रुचि रखते हैं - स्पष्ट रूप से दोनों में से कोई भी निश्चित नहीं है कि वह क्या है। (मेरा सवाल उस मुद्दे से स्वतंत्र है।)

जवाबों:


5

मैं प्री / पोस्ट इंस्टेंस स्क्रिप्ट्स का उपयोग करना जारी रखूंगा,

प्रीस्टेन - यह स्क्रिप्ट उस पैकेज से पहले निष्पादित होती है जिसे उसके डेबियन आर्काइव (".deb") फ़ाइल से अनपैक किया जाएगा। कई 'प्रीस्टीन' स्क्रिप्ट उन पैकेजों के लिए सेवाएं रोकती हैं जिन्हें अपग्रेड या अपग्रेड होने तक पूरा किया जा रहा है ('पोस्टस्टीन' स्क्रिप्ट के सफल निष्पादन के बाद)।

पोस्टइन - यह स्क्रिप्ट आम तौर पर अपने फू संग्रह (".deb") फ़ाइल से हटाए जाने पर पैकेज फू के किसी भी आवश्यक कॉन्फ़िगरेशन को पूरा करती है। अक्सर, 'पोस्टस्टीन' स्क्रिप्ट उपयोगकर्ता से इनपुट के लिए पूछती है, और / या उपयोगकर्ता को चेतावनी देती है कि यदि वह डिफ़ॉल्ट मान स्वीकार करता है, तो उसे वापस जाना चाहिए और उस पैकेज को स्थिति वारंट के रूप में पुन: कॉन्फ़िगर करना चाहिए। कई 'पोस्टस्टीन' स्क्रिप्ट तब एक नया पैकेज स्थापित या अपग्रेड होने के बाद सेवा शुरू करने या फिर से शुरू करने के लिए आवश्यक किसी भी कमांड को निष्पादित करती है ।

देखें - https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html

प्रारंभ को रोकने का वाक्य-विन्यास | स्टॉप | पुनः आरंभ एक सशर्त के रूप में लिखा गया है, देखें https://www.debian.org/doc/debian-policy/ch-opersys.html अनुभाग 9.3.3.2 चल रहा है

अगर जो आह्वान करता है-rc.d> / dev / null 2> & 1; फिर

invoke-rc.d पैकेज

अन्य

/etc/init.d/package

फाई

इसलिए ...

if which service >/dev/null 2>&1; then
        service package <action>
elif which invoke-rc.d >/dev/null 2>&1; then
        invoke-rc.d package <action>
else
        /etc/init.d/package <action>
fi

और जरूरत पड़ने पर systemd के लिए एक और सशर्त जोड़ें;)

तो हाँ, शुरू करने का उचित तरीका। स्टॉप | रिस्टार्ट उपयुक्त रैपर स्क्रिप्ट (इनवोक-आरओडी / सिस्टम) के साथ एक सेवा को पुनरारंभ करना है, जब संभव हो, तो इनिट स्क्रिप्ट (/etc/init.d/package) और फिर कॉल करना कोई रैपर उपलब्ध न होने पर /etc/init.d स्क्रिप्ट पर वापस जाना।


एक को छोड़कर, मेरी अधिकांश शंकाओं का वह बहुत अधिक उत्तर देता है। invoke-rc.dआदमी पेज और डेबियन नीति डॉक्स हमें बताता है के संबंध में इसका इस्तेमाल करने की /etc/init.d/स्क्रिप्ट (शायद क्योंकि वे अभी भी प्रयोग किया SysV-init)। उपस्टार्ट या सिस्टमड के साथ यह कैसे बदलता है?
मूरू

अपने प्रश्न को अपडेट करें या आपके द्वारा पढ़ी जा रही जानकारी का लिंक पोस्ट करें। मैंने पैकेजिंग के बारे में मैन पेज में कुछ भी नहीं देखा। मुझे लगता है कि यह आपकी सेवा और init स्क्रिप्ट पर निर्भर करता है (क्या यह upstart है? Systemd?) आप askubuntu.com पर पूछ रहे हैं, और ubuntu upstart का उपयोग करते हैं, इसलिए askubuntu.com/questions/58404/how-to-start-and-stop —का सेवा । यदि आपका पैकेज एक पुरानी init स्क्रिप्ट का उपयोग करता है, तो इसे अभी के लिए अपस्टार्ट में परिवर्तित किया जाना चाहिए और लंबे समय में systemd किया जाना चाहिए
पैंथर

मैंने सवाल अपडेट किया है।
मूरू

प्रश्न के लिए कोई आसान या एकल उत्तर नहीं है क्योंकि "यह निर्भर करता है" यह एक अस्थायी स्थिति का एक सा है क्योंकि ubuntu और debian आगे बढ़ना दोनों systemd का उपयोग करेंगे। आपको डेबियन (या उबंटू) पर सेवाओं के लिए इनवोक-आरईआरडी का उपयोग करना चाहिए जो उबंटू का उपयोग करने वाली सेवाओं के लिए उबंटू पर sysv-init और सेवा का उपयोग करते हैं। यह इतना स्क्रिप्टिंग रचनात्मक होना है अगर जरूरतinvoke-rc.d ... || service ...
पैंथर

मुझे लगा कि आप पूछ रहे थे कि क्या आपको प्री / पोस्ट इंस्टेंस स्क्रिप्ट्स का इस्तेमाल करना चाहिए, न कि आपकी स्क्रिप्ट के सिंटैक्स का।
पैंथर

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