Systemd स्क्रिप्ट शुरू नहीं कर सकता?


9

मेरे पास एक BASH- स्क्रिप्ट है जिसे मैं स्टार्ट अप पर चलाना चाहता हूं। मेरा सिस्टम सिस्टमड चल रहा है, इसलिए मैंने व्हाट्सएप फाइल बनाई है जिसमें मुझे लगता है कि नेकसेरी जानकारी क्या है:

[Unit]
Description=My Script
After=network.target

[Service]
ExecStart=/home/myscript.sh

[Install]
WantedBy=multi-user.target

मैंने इसे रीबूट किया गया 'रजिस्टर' करने के लिए systemctl एनेबल किया। बूट पर मुझे बताया गया था कि मेरी स्क्रिप्ट को निष्पादित किया जाएगा, लेकिन मैं न तो किसी भी संदेश को देख सकता था जिसे ईसीएचओ को स्क्रीन पर प्रदर्शित करना चाहिए और न ही उसने किसी फ़ाइल में कुछ लिखा था, जो मैंने स्क्रिप्ट में लिखा था। इसके अतिरिक्त, यह उस एप्लिकेशन को शुरू नहीं करता है जिसे इसे शुरू करना है।

Systemctl स्टेटस मुझे बताता है कि स्क्रिप्ट रन हो गई है और सफलतापूर्वक समाप्त हो गई है। फिर भी, स्क्रिप्ट का कोई प्रभाव नहीं है। अगर मैं स्क्रिप्ट को शेल से चलाता हूं तो यह पूरी तरह से ठीक काम करता है।

क्या आप में से किसी को पता है कि मेरी समस्या क्या हो सकती है?


3
जाहिर है, अगर आपकी स्क्रिप्ट कुछ और शुरू होती है, तो उसे "टाइप = फोर्किंग" की आवश्यकता होती है, मैं पहले सेटिंग्स के साथ गड़बड़ न करने के लिए थोड़ा बेवकूफ महसूस करता हूं।
टोक्योएमडब्ल्यूएस

1
इसे हल करने के लिए +1। कृपया अपने समाधान को उत्तर के रूप में पोस्ट करें और इसे उसी समस्या वाले अन्य लोगों की मदद करने के लिए स्वीकार करें।
टेराडन सेप

1
@TokyoMEWS: दरअसल, अगर स्क्रिप्ट कुछ और शुरू होता है और बाहर निकलता है , जबकि इसकी बच्चों चल रहे हैं, यह "प्रकार = forking" की जरूरत है।
15:16 बजे user1686

जवाबों:


7

इसके अलावा खुद के द्वारा पाया जाने वाला TokyoMEWS ...

जाहिर है, अगर आपकी स्क्रिप्ट कुछ और शुरू होती है, तो उसे "टाइप = फोर्किंग" की आवश्यकता होती है

(जो पूरी तरह से सही नहीं है - Type=forkingकेवल तभी आवश्यक हो जाता है जब आपकी स्क्रिप्ट उसके बच्चों के भागते समय निकल जाए )

... अन्य संभावित समस्याएं हैं:

  1. मैं अनुमान लगा रहा हूं कि "स्क्रीन पर प्रदर्शन" से आपका मतलब था कि स्क्रिप्ट बस स्टडआउट के लिए कुछ लिखती है। यह बूट के दौरान स्क्रीन पर नहीं जाता है - बल्कि, एक सेवा के स्टडआउट से सब कुछ पत्रिका को भेजा जाता है (या आपके सिस्टमड संस्करण के आधार पर syslog करने के लिए)।

  2. यदि आपने वास्तव में स्क्रीन पर लिखने का प्रयास किया है (उदाहरण का उपयोग करके echo Hi >/dev/tty1), तो यह बहुत संभावना है कि लॉगिन संकेत दिखाने से पहले एगेटी स्क्रीन को साफ करने पर स्क्रिप्ट का आउटपुट गायब हो जाता है । (इससे बचने के लिए, आपको इकाई का आदेश देना होगा After=getty@tty1.service)।

  3. किसी फ़ाइल में कुछ लिखने के लिए, आपको फ़ाइल सिस्टम माउंटेड रीड-राइट होना चाहिए। इसके लिए, आवश्यक After=local-fs.target हो सकता है, अन्यथा इकाई फिर से बहुत जल्दी शुरू हो सकती है। लेकिन यह विशिष्ट ओएस कॉन्फ़िगरेशन पर निर्भर करता है।


1

यदि आपकी स्क्रिप्ट ExecStop क्लॉज़ को परिभाषित करती है , तो आपको ExecStop के बाद स्वचालित रूप से कॉल किए जाने वाले ExecStop से बचने के लिए " RemainAfterExit = Yes" सेट करना होगा । यह ExecStart कमांड को निष्पादित करने के बाद आपकी सेवा को " सक्रिय " स्थिति में लाने की अनुमति देगा ।

[Service]
ExecStart=/home/myscript.sh start
ExecStop=/home/myscript.sh stop
RemainAfterExit=yes
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.