मैं ओएस एक्स पर लॉन्च लॉगिंग को कैसे सक्रिय कर सकता हूं?


35

मैं ओएस एक्स 10.6 पर लॉन्च लॉगिंग को कैसे सक्रिय कर सकता हूं?

मैंने एक नया डेमॉन जोड़ा जो ठीक से शुरू नहीं हो रहा है (स्थिति है 1)।

मैं समस्या पर बहस करना चाहता हूं, लेकिन मुझे launchdलॉग नहीं मिल पा रहे थे, वे अंदर नहीं थे /var/log/launchd.log

जवाबों:


26

मुझे इसका हल मिल गया

 sudo launchctl log level debug 

और उसके बाद

 tail -f /var/log/system.log

1
मैंने महसूस किया है कि इस OS को कुछ और की तरह ही एडमिन की जरूरत है। "डब्ल्यूटीएफ जहां क्रिया झंडा है!" OSX चट्टानों, यकीन है, लेकिन एक संभाल पाने के लिए मुश्किल। Thx +1
chiggsy

फॉलो अप, FYI करें: यह OS X 10.7.2 के साथ भी काम करता है। धन्यवाद।
एलन डब्लू स्मिथ

मैं अपने तेंदुए सर्वरों के साथ समस्या कर रहा हूं और मुझे लगा कि मेरे लॉन्चड प्लिस्ट में कुछ गड़बड़ है (हालांकि स्नो लेपर्ड में वही प्लिस्ट काम करता है)। मैं इस पर ठोकर
खाने के

27
यह अब 10.10 Yosemite के बाद से काम नहीं करता है। लॉन्चर संस्करण: डार्विन सिस्टम बूटस्ट्रैपर 2.0.0: मंगल सितम्बर 9 16:30:56 पीडीटी 2014
जीनमैर्टज़

9
@JeanMertz - कोई विकल्प?
उमंग

20

मान लें कि आप लॉन्च किए जाने के बजाय अपनी प्रक्रिया को लॉग करने की कोशिश कर रहे हैं, अगर आप लॉन्च प्लिस्ट फाइल में निम्नलिखित पंक्तियों को शामिल करते हैं:

<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>

और प्रक्रिया को फिर से लोड करें, कोई भी लॉगिंग या प्रिंटिंग जिसे आप अपनी स्क्रिप्ट में आंतरिक रखते हैं, उन दो फ़ाइलों में से एक में जब भी इसे चलाया जाएगा, तब कैप्चर किया जाएगा। हालाँकि फाइलों को घुमाना आपके ऊपर निर्भर करता है। जैसा कि आप उम्मीद कर सकते हैं, यदि आप दोनों उदाहरणों में एक ही फ़ाइल का उपयोग करते हैं, तो यह एक ही स्थान पर त्रुटि और स्टडआउट दोनों को लॉग करेगा।

देखें: लॉन्च डेमों और एजेंटों को लॉन्च करते हुए डिबगिंग लॉन्चिंग सेक्शन


17

OS X 10.11 (El Capitan) पर, आप sudo launchctl debug <service-target> --stdout --stderrवन-ऑफ़ लॉगिंग को सक्षम करने के लिए उपयोग कर सकते हैं , यदि आप @peter द्वारा सुझाए गए फाइल सिस्टम विकल्प को नहीं लेना चाहते हैं।

वर्तमान कार्यान्वयन में सामान बहुत अलग है launchctl, और <service-target>अजीब तरह का है। उदाहरण के लिए, मान लें कि मेरे पास एक स्थानीय सेवा है जिसे मैं कॉन्फ़िगर करता हूं ~/Library/LaunchAgents/dev.localmon.plist, जिसमें "लेबल" है dev.localmon। यह <service-target>है gui/$UID/dev.localmon, जहां $UIDआपकी उपयोगकर्ता आईडी है, जो, चूंकि आप सीएलआई में इसे चला रहे हैं, आपका शेल आपके लिए इंटरपोल करेगा।

इसलिए मेरी dev.localmonसेवा को शुरू करना स्टार्टअप पर दुर्घटनाग्रस्त हो गया (यह था), मैं launchctlअगली बार कॉल करने के लिए निम्नलिखित प्रक्रिया को कॉल कर सकता हूं और अगली बार (और केवल अगली बार) सेवा शुरू होने पर अपने शेल में stderr:

sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr

चूंकि यह खुले और तैयार TTYs के साथ लटका हुआ है, इसलिए दूसरे टर्मिनल पर जाएं और चलाएं:

launchctl start dev.localmon
# start is a legacy command and doesn't use the fancy new service-target notation

फिर, पहले टर्मिनल में, आपको आउटपुट देखना चाहिए । (अजीब तरह से, यह बंद नहीं होता है जब सेवा प्रक्रिया मर जाती है, इसलिए आपको Ctrl-C करना होगा।)

Btw, एक बार जब आप PATH या पर्यावरण से पहले जो भी सेवा को तोड़ रहे थे, उसके साथ अपनी कॉन्फिग फ़ाइल को ठीक कर लें, तो आपको अभी भी पुराने launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plistदो-चरण का उपयोग करना होगा क्योंकि दस्तावेज़ीकरण के कथित सब- uncacheकमैंड में निम्नलिखित प्रभाव पड़ता है:

कमान अभी तक लागू नहीं हुई है।

ऐप्पल की पोस्ट-जॉब्स रिलीज़ रणनीति के लिए Yay: "तेजी से आगे बढ़ें और चीजों को तोड़ें"


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