मैं अपस्टार्ट स्क्रिप्ट को कैसे डिबग करूं?


67

किसी कारण से मुझे अपॉइंट अपग्रेड के दौरान एक त्रुटि मिल रही है , जिसका कारण है

% sudo service apport start
start: Job failed to start

Sysvinit के तहत, मैं इस तरह की समस्या को डीबग करके चला सकता हूं

sudo sh -x /etc/init.d/whatever start

लेकिन ऐसा लगता है कि उपस्टार्ट के नक्शे पर नहीं है। मुझे आगे क्या आज़माना चाहिए?

यह पता चला है कि एक वर्कअराउंड है जो इंस्टॉल को आगे बढ़ने देगा। लेकिन मैं अभी भी सामान्य प्रश्न में दिलचस्पी रखता हूं कि कोई स्क्रिप्ट कैसे ट्रेस करेगा।


1
मैं अधिक गहन उत्तर पर काम कर रहा हूं, लेकिन वर्कअराउंड के लिंक के लिए धन्यवाद, वही बात आज मुझे अपडेट करने के लिए हुई!
मार्क रसेल

हाहा, और उन्होंने 12 मिनट पहले फिक्स जारी किया। बीटा मज़ा नहीं चल रहा है? (वास्तव में नहीं!)
मार्क रसेल

+ मुहम्मद ने नीचे सही उत्तर पोस्ट किया।
ट्रैविस रीडर

मुझे उपयोगी डिबगिंग जानकारी मिली /var/log/syslog
मैट

जवाबों:


29

निम्नलिखित सभी जानकारी (और काफी अधिक उपयोगी उपस्टार्ट मदद) अपस्टार्ट कुकबुक से है । धारा 18 में डिबगिंग शामिल है। http://upstart.ubuntu.com/cookbook/#debugging

अपस्टार्ट नौकरी के "लिपि" श्लोक को ट्रेस करने के इस विशिष्ट मामले में आपको "लिपि" शब्द के ठीक नीचे निम्नलिखित पंक्तियों को जोड़ना चाहिए:

exec 2>>/dev/.initramfs/myjob.log
set -x

विषम स्थान का कारण यह है कि /dev/.initramfs/ बहुत शुरुआती बूट में उपलब्ध है, रूट फाइल सिस्टम लोड होने से पहले, और बूट के बाद भी उपलब्ध होना जारी है। मैं अनुमान लगा रहा हूं, हालांकि, आपको शायद उस रास्ते का उपयोग करने की आवश्यकता नहीं है । फिर भी, विकल्प जानना अच्छा है।

यह भी ध्यान दिया जाना चाहिए कि सभी स्क्रिप्ट set -eइतनी कमांड के साथ चलाई जाती हैं जो विफल हो जाती हैं और स्क्रिप्ट पूरी तरह से बाहर निकल जाएगी। जो समझ में आता है, क्योंकि स्क्रिप्ट को रूट के रूप में चलाने के दौरान बहुत सावधानी बरतनी चाहिए।

मैं उपस्टार्ट नौकरी के साथ काम करने वाले किसी भी व्यक्ति के लिए सामान्य रूप से ऊपर की गई उपस्टार्ट कुकबुक से परामर्श करने की सलाह देता हूं।


उसके लिए धन्यवाद, अगर मैंने बग को हल नहीं किया था, तो मैंने संभवतः set -xआपके सुझाव के अनुसार स्क्रिप्ट को संशोधित किया होगा । मैं ज्यादातर सोच रहा था कि क्या कोई क्लीनर तरीका है।
पूलि

हाँ, ऐसा नहीं है कि मुझे पता है (और अगर यह रसोई की किताब में नहीं है, तो इसका मतलब है कि शायद अभी नहीं है)। उस विचार के अलावा, अधिकांश डिबगिंग तकनीकों का उल्लेख उपस्टार्ट और अपस्टार्ट घटनाओं के स्वयं के समस्या निवारण के बारे में अधिक है, जो कि मैं आमतौर पर खुद को पाता हूं। :)
मार्क रसेल

और फिर भी यह विधि विफल हो जाएगी setuidऔर यदि setgidनौकरियों में उपयोग किया जाता है।
0xC0000022L

/dev/.initramfs हमेशा मौजूद नहीं है। मैं सिर्फ एक मशीन भर में आया हूं जिसमें यह रास्ता नहीं है।
सर्ज बोर्स्च

110

Upstart लॉग फ़ाइल में आपकी सेवा के निष्पादन को उसी नाम से लॉग इन करता है /var/log/upstart/your-service-name.log। यह मददगार होना चाहिए।


2
ठीक है, ऐसा लगता है कि इसमें नौकरियों का स्टैडर भी शामिल है, इसलिए यदि मैं set -xइसे चालू करता हूं तो शायद वहां दिखाई देगा।
पूली

1
मैंने अपनी /etc/init.d/Xservice स्क्रिप्ट में एक इको आधारित लॉग स्टेटमेंट में रखा है, लेकिन यह इस स्थान पर दिखाई नहीं देता है! OS: उबंटू 14.04 ट्रस्टी
Champ

सिसलॉग क्यों नहीं? हो सकता है कि मैं एक सामान्य सुविधा का सुझाव दूं, हो सकता है कि स्वयं rsyslog, कि upstart और कोई भी घटक syslog को लिखने के लिए उपयोग करे यदि यह उपलब्ध नहीं है, या एक अस्थायी स्थान पर जिसे syslog asap पर स्थानांतरित किया जाएगा। इसे खोजने में मुझे आधा दिन लगा। कृपया इस टिप्पणी को आगे बढ़ाएं TIA।
पापौ

4
यह अब 16.04 में स्पष्ट रूप से सही नहीं लगता है, जाहिरा तौर पर 15.10 से कम से कम: उस निर्देशिका में अंतिम फाइलें 15.10 रिलीज से ठीक पहले दिनांकित हैं।
FGM

1
@FGM यह है क्योंकि 16.04 अब upstart का उपयोग नहीं करता है, यह systemd का उपयोग करता है। लॉग के साथ पहुँचा जा सकता हैjournalctl
जेरेमी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.