जवाबों:
मुझे इसका हल मिल गया
sudo launchctl log level debug
और उसके बाद
tail -f /var/log/system.log
मान लें कि आप लॉन्च किए जाने के बजाय अपनी प्रक्रिया को लॉग करने की कोशिश कर रहे हैं, अगर आप लॉन्च प्लिस्ट फाइल में निम्नलिखित पंक्तियों को शामिल करते हैं:
<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>
और प्रक्रिया को फिर से लोड करें, कोई भी लॉगिंग या प्रिंटिंग जिसे आप अपनी स्क्रिप्ट में आंतरिक रखते हैं, उन दो फ़ाइलों में से एक में जब भी इसे चलाया जाएगा, तब कैप्चर किया जाएगा। हालाँकि फाइलों को घुमाना आपके ऊपर निर्भर करता है। जैसा कि आप उम्मीद कर सकते हैं, यदि आप दोनों उदाहरणों में एक ही फ़ाइल का उपयोग करते हैं, तो यह एक ही स्थान पर त्रुटि और स्टडआउट दोनों को लॉग करेगा।
देखें: लॉन्च डेमों और एजेंटों को लॉन्च करते हुए डिबगिंग लॉन्चिंग सेक्शन ।
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 debug
Could not find domain for
मेरे लिए बाहर निकलता है