कैसे सिस्टम इकाई ExecStart डिबग करने के लिए


13

मैं उत्सुक हूं कि क्या मैं पूरी तरह से विस्तारित ExecStart/ExecStopकमांड लाइन का प्रिंट आउट ले सकता हूं । निम्नलिखित उदाहरण पर विचार करें:

ExecStart=/usr/bin/java $OPTS_COMMON $OPTS $OPTS_LOG $OPTS_DEBUG some.class.Start --param1 ${PARAM1} --param2 ${PARAM2}

मेरे पास बहुत लंबी कमांड लाइनें हैं जिनमें बहुत सारे पर्यावरण चर शामिल हैं। यदि कुछ चर गलत हो जाते हैं (उदाहरण के लिए ड्रॉप-इन कॉन्फ़िगरेशन), तो सेवा बिल्कुल भी शुरू नहीं हो सकती है। हालाँकि मुझे कहीं भी प्रतिस्थापित एन्स के साथ पूरी तरह से विस्तारित लाइन नहीं दिखती है और मैं यह पता लगाने के लिए संघर्ष करता हूं कि क्या गलत है।

मेरे पास इसे पाने के लिए कोई भाग्य नहीं था और अब तक मुझे केवल यही संभावना है /usr/bin/echoकि सेवा के बजाय चलाने के लिए इकाई फ़ाइल को संशोधित किया जाए। लेकिन वह थोड़ा थकाऊ है। या इससे भी अधिक कष्टप्रद समाधान - हर पर्यावरण चर को एक-एक करके देखें।

क्या कोई तरीका है कि मुझे दिखाने के लिए सिस्टमड को कैसे मजबूर करना है जो वास्तव में चलाने का प्रयास किया जाता है?

जवाबों:


10

दुर्भाग्य से वहाँ कोई रास्ता नहीं बनाया गया है। अंतिम ExecStart को देखने के लिए आप डिबगिंग चालू कर सकते हैं। फ़ाइल को संपादित करें /etc/systemd/system.confऔर करने के LogLevel=लिए सेट करें debug। तब आपको कुछ इस तरह दिखाई देगा:

java.service About to execute: /usr/bin/java $OPTS_COMMON...यह आपकी समस्या को हल नहीं करता है लेकिन सिस्टमड के स्पेसिफिक रिप्लेसमेंट को देखना अच्छा है। https://www.freedesktop.org/software/systemd/man/systemd.unit.html(specifiers)

लेकिन अगर आप वास्तव में तर्क प्रतिस्थापन की तह तक जाना चाहते हैं तो आपको यहां देखने की आवश्यकता है: https://github.com/systemd/systemd/blob/7ce9cc154576e342015eab8c1500790aededcc01/src/core/execute.c#L257070


मैं थोड़ा डर गया था कि ऐसा करने का कोई तरीका नहीं है। :/ फिर भी धन्यवाद।
pystole

2

* .Service फ़ाइल अनुभाग में [सेवा]

ExecStartPre=/bin/bash -l -c 'echo "$OPTS_COMMON">/tmp/options.debug'

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