मेरी Systemd इकाई क्यों भरी हुई है, लेकिन निष्क्रिय (मृत) है?


29

मैं अपने सर्वर पर ग्रेफाइट सेट करने की कोशिश कर रहा हूं । मैं कार्बन कैश डेमन के साथ कोई समस्या नहीं शुरू कर सकता sudo /opt/graphite/bin/carbon-cache.py start, लेकिन मैं इसे एक सिस्टमड इकाई के रूप में चलाने के लिए संघर्ष कर रहा हूं।

यहाँ मेरी सेवा फ़ाइल में क्या है graphite.service:

[Unit]
Description=Carbon for Graphite

[Service]
ExecStart=/opt/graphite/bin/carbon-cache.py start

[Install]
WantedBy=multi-user.target

लेकिन जब मैं यूनिट शुरू करता हूं तो मुझे निम्न दर्जा प्राप्त होता है:

$ systemctl status graphite.service            
* graphite.service - Carbon for Graphite
   Loaded: loaded (/etc/systemd/system/graphite.service; enabled)
   Active: inactive (dead) since Fri 2014-06-13 18:44:11 UTC; 2s ago
  Process: 4525 ExecStart=/opt/graphite/bin/carbon-cache.py start (code=exited, status=0/SUCCESS)
 Main PID: 4525 (code=exited, status=0/SUCCESS)

Jun 13 18:44:11 MEADOW systemd[1]: Started Carbon for Graphite.

Journalctl अधिक जानकारी नहीं देता है।

मुझे "निष्क्रिय (मृत) ... (कोड = निकास, स्थिति = 0 / SUCCESS)" की स्थिति के साथ इकाइयों की व्याख्या और डीबग कैसे करना चाहिए? मैंने पहले असफल इकाइयों को देखा है, लेकिन यह सफलतापूर्वक लोड हो रहा है अभी तक नहीं चल रहा है और मुझे नहीं पता कि इसका क्या मतलब है।


4
इसका मतलब है कि systemd ने अपना काम पूरा कर लिया है। क्या कोई Type=विकल्प नहीं होना चाहिए ? man systemd.serviceएक उपयुक्त प्रकार के लिए देखें ।
जसोनव्रीयन

1
यह समझ आता है। मुझे केवल इतना करना था Type=forkingकि [Service]अनुभाग में जोड़ दिया गया था ।
रेन एवरेट

जवाबों:


26

Jasonwryan की टिप्पणी के अनुसार, जबकि डिफ़ॉल्ट Type=simpleकई Systemd सेवा फ़ाइलों के लिए काम करता है, यह तब काम नहीं करता जब स्क्रिप्ट ExecStartकिसी अन्य प्रक्रिया को लॉन्च करता है और पूरा करता है, जैसा कि ग्रेफाइट के कार्बन- cache.py के साथ होता है। इन मामलों में आपको स्पष्ट रूप Type=forkingसे [Service]अनुभाग में निर्दिष्ट करने की आवश्यकता है ताकि सिस्टमड प्रारंभिक प्रक्रिया के बजाय स्पॉन्ड प्रक्रिया को देखना जानता हो।

जैसा कि समझाया गया है man systemd.service:

यदि फोर्किंग के लिए सेट किया गया है, तो यह अपेक्षा की जाती है कि ExecStart = के साथ कॉन्फ़िगर की गई प्रक्रिया फोर्क () को उसके स्टार्ट-अप के हिस्से के रूप में कहेगी। स्टार्ट-अप पूरा होने पर मूल प्रक्रिया से बाहर निकलने की उम्मीद है और सभी संचार चैनल स्थापित किए गए हैं। बच्चा मुख्य डेमन प्रक्रिया के रूप में चलता रहता है। यह पारंपरिक UNIX डेमोंस का व्यवहार है। यदि इस सेटिंग का उपयोग किया जाता है, तो यह PIDFile = विकल्प का उपयोग करने की भी सिफारिश की जाती है, ताकि systemd डेमॉन की मुख्य प्रक्रिया की पहचान कर सके। मूल प्रक्रिया से बाहर निकलते ही सिस्टम-अप अनुवर्ती इकाइयों को शुरू करने के साथ आगे बढ़ेगा।

ग्रेफाइट-विशिष्ट उत्तर

जबकि ऊपर ने मेरे Systemd मुद्दे को हल किया, मैं जल्दी से ग्रेफाइट-विशिष्ट मुद्दों (ट्विस्टेड) ​​के साथ भाग गया और डिफ़ॉल्ट पर वापस जा रहा था Type

ग्रेफाइट <0.9.12

ग्रेफाइट के पिछले संस्करणों में कोई केवल --debugविकल्प का उपयोग करके कांटे से बच सकता है:

[Service]
ExecStart=/opt/graphite/bin/carbon-cache.py --debug start

ग्रेफाइट> = 0.9.13

में इस पुल अनुरोध एक --no-daemonविकल्प विलय हो गया:

[Service]
ExecStart=/opt/graphite/bin/carbon-cache.py --no-daemon start
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.