सेवा शुरू करने में विफल


16

मैंने एक systemd सेवा बनाई है:

[Unit]
Description=My service

[Service]
Type=forking
ExecStart=/bin/sh $HOME/theFolder/run.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=mine.service

मैंने इसे / etc / systemd / system फ़ोल्डर में डाला और इसे मेरा नाम दिया। service।

अगर मैं चला तो sudo service mine startयह मुझे देता है:

मेरा शुरू करने में विफल रहा

--- अपडेट करें -----

मैं पहले दौड़ता हूं sudo systemctl daemon-reloadऔर अब यह मुझे कोई संदेश नहीं देता है लेकिन सेवा अभी भी शुरू नहीं हुई है।


10
क्या आपने systemctl daemon-reloadअपनी यूनिट फ़ाइल बनाने के बाद चलाया है ?
वीलैंड

@Wieland: हम्म..अब यह मुझे कोई संदेश नहीं दिखाता है। लेकिन, यह अभी भी शुरू नहीं होता है।
जॉर्ज

@don_crissti: स्थिति कहती है कि यह सक्रिय है, लेकिन स्क्रिप्ट (ExecStart में) निष्पादित नहीं की गई है।
जॉर्ज

यह उचित घर का पता कैसे चलेगा? सिस्टम सेवा के लिए आप क्या उम्मीद करते हैं?
सर्ज

@ योगदान: हम्म। एसओ, मैं घर का उपयोग कैसे कर सकता हूं?
जॉर्ज

जवाबों:


14

$HOMEउपयोगकर्ता के होम डायरेक्टरी को इंगित करता है जो स्क्रिप्ट चला रहा है। सिस्टमड सेवाओं को रूट के साथ शुरू किया जाता है, इसलिए यह संभवतः करने की कोशिश करेगा /root/theFolder/run.sh। सेवा फ़ाइलों में पूर्ण पथ का उपयोग करें।

आपके पास forkingविकल्प भी है । यह उस प्रोग्राम के लिए आवश्यक है जो स्वयं पृष्ठभूमि में है, क्या आपकी स्क्रिप्ट ऐसा करती है? अधिकांश नहीं करते हैं और यदि आपका नहीं है तो आपको इस विकल्प को हटा देना चाहिए या सिस्टमड आपकी स्क्रिप्ट के इंतजार कर रहा होगा जैसा कि उसने शुरू किया था।

साथ ही सिस्टम सर्विस फाइलें जो आपके होम डायरेक्टरी में स्क्रिप्ट्स की ओर इशारा करती हैं, वे हतोत्साहित होती हैं और संभवतः एक सुरक्षा चिंता का विषय है। चूँकि उन्हें रूट के रूप में चलाया जाता है, जो उन्हें संशोधित कर सकते हैं, संभवतः आपके कंप्यूटर पर रूट एक्सेस प्राप्त कर सकते हैं। स्क्रिप्ट को कॉपी करना /usr/local/binऔर यह सुनिश्चित करना बेहतर है कि इसे रोकने के लिए रूट के पास स्वामित्व और केवल लिखने योग्य है। सेवा फ़ाइल में विकल्पों User=और Group=विकल्पों का उपयोग करके स्क्रिप्ट को एक अनपेक्षित उपयोगकर्ता के रूप में चलाना भी एक अच्छा विचार है ।

यदि आप इसे अपने उपयोगकर्ता के रूप में चलाना चाहते हैं, तो बेहतर है कि आप सेवा फ़ाइल को ~/.config/systemd/user/प्रारंभ करें और इसे प्रारंभ करें / इसे सक्षम करें systemctl --user enable yourservice && systemctl --user start yourservice(ध्यान दें, अपने उपयोगकर्ता को रूट के रूप में चलाएं)। उपयोगकर्ता सेवा फ़ाइलों के बारे में अधिक जानकारी के लिए इसे देखें ।


: मैंने स्क्रिप्ट को / usr / लोकल / बिन और सेवा में / .config/systemd/user.Ius में डाल दिया है। यदि मैं सेवा को सक्षम करने का प्रयास करता हूं, तो यह मुझे "अतिरिक्त तर्क" दिखाता है। यदि मैं सिस्टमलैटल शो का उपयोग करने की कोशिश करता हूं तो वह विफल हो जाता है। .. इकाई .. ’, कुछ इस तरह।
जॉर्ज

क्या आप अपने द्वारा पूर्ण की गई कमांड और अधिक विस्तृत लॉग प्रदान कर सकते हैं। अंशों के साथ डिबग करना कठिन है।
माइकल डैफिन

: क्या $ HOME पथ का उपयोग करने का कोई समाधान है? क्योंकि, अगर मैं स्क्रिप्ट को / usr / स्थानीय / बिन में डालता हूं, तो यह $ HOME के ​​सापेक्ष पथ का उपयोग करता है । मैंने यह देखा । और मैंने HOME=$HOMEपहली पर्यावरण फ़ाइल में डालने का प्रयास किया । लेकिन सेवा शुरू नहीं हो सकी, कोई त्रुटि नहीं।
जॉर्ज

1
ubuntu पर मुझे इस प्रणाली के लिए systemctl का उपयोग नहीं करना था, systemd का उपयोग करके मुझे एक त्रुटि मिली "अतिरिक्त तर्क"
अलेक्जेंडर मिल्स

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