ฉันจะเปิดใช้งานการบันทึก launchd บน OS X ได้อย่างไร


35

ฉันจะเปิดใช้งานการบันทึก Launchd บน OS X 10.6 ได้อย่างไร

ฉันเพิ่มภูตใหม่ที่ไม่เริ่มทำงานอย่างถูกต้อง (สถานะคือ1)

ฉันต้องการที่จะแก้ปัญหาปัญหา แต่ผมไม่สามารถที่จะหาบันทึกพวกเขาจะไม่ได้อยู่ในlaunchd/var/log/launchd.log

คำตอบ:


26

ฉันพบวิธีแก้ปัญหา

 sudo launchctl log level debug 

และหลังจากนี้

 tail -f /var/log/system.log

1
ฉันรู้ว่าระบบปฏิบัติการนี้ต้องการผู้ดูแลระบบเหมือนทุกสิ่งทุกอย่าง กำลังมองหาสิ่งนี้หลังจากวันที่กรีดร้อง "WTF ธง verbose อยู่ที่ไหน!" แน่นอนว่า OSX เป็นหิน แต่มีความยุ่งยากในการจัดการ ขอบคุณ +1
chiggsy

ติดตาม, FYI: สิ่งนี้ใช้ได้กับ OS X 10.7.2 เช่นกัน ขอบคุณ
Alan W. Smith

ฉันเคยมีปัญหากับเซิร์ฟเวอร์ Leopard ของฉันและฉันคิดว่ามีบางอย่างผิดปกติกับ Plist Plist ของฉัน (แม้ว่า Plist เดียวกันจะทำงานใน Snow Leopard) ฉันเกิดขึ้นเพื่อสะดุดลงนี้และมันทำงานเช่นเสน่ห์ :)
icasimpan

27
สิ่งนี้ใช้ไม่ได้อีกต่อไปตั้งแต่ 10.10 โยเซมิตี รุ่น launchctl: ระบบของดาร์วิน Bootstrapper 2.0.0: อังคาร 9 ก.ย. 16:30:56 PDT 2014
JeanMertz

9
@JeanMertz - ทางเลือกใด ๆ
Umang

20

สมมติว่าคุณกำลังพยายามบันทึกกระบวนการของคุณแทนที่จะเรียกใช้งานตัวเองหากคุณรวมบรรทัดต่อไปนี้ในไฟล์ Plistplist:

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

และโหลดกระบวนการบันทึกหรือการพิมพ์ใด ๆ ที่คุณมีภายในสคริปต์ของคุณจะถูกบันทึกเป็นหนึ่งในสองไฟล์เหล่านี้เมื่อใดก็ตามที่มีการเรียกใช้ แม้ว่าการหมุนไฟล์จะขึ้นอยู่กับคุณ อย่างที่คุณคาดหวังถ้าคุณใช้ไฟล์เดียวกันในทั้งสองกรณีมันจะบันทึกทั้งข้อผิดพลาดและ stdout ไปที่เดียวกัน

ดู: การแก้จุดบกพร่อง launchd ส่วนงานที่สร้างเปิดตัวภูตและตัวแทน


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ที่ไหน$UIDID ผู้ใช้ของคุณซึ่งเมื่อคุณใช้งานที่ CLI เชลล์ของคุณจะแก้ไขให้คุณ

ดังนั้นหากว่าdev.localmonบริการของฉันหยุดทำงานเมื่อเริ่มต้น (มันคือ) ฉันสามารถเรียกสิ่งต่อไปนี้เพื่อให้launchctlท่อ stdout และ stderr ของกระบวนการในเชลล์ของฉันในครั้งถัดไป (และในครั้งถัดไปเท่านั้น) ที่บริการเริ่มต้น:

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

เนื่องจากแฮงค์กับ TTY แบบเปิดและพร้อมใช้งานให้ไปที่เทอร์มินัลอื่นแล้วรัน:

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

จากนั้นกลับมาที่เทอร์มินัลแรกคุณจะเห็นผลลัพธ์ (ผิดปกติมันไม่ปิดเมื่อกระบวนการบริการตายดังนั้นคุณจะต้องกด Ctrl-C)

Btw เมื่อคุณแก้ไขไฟล์ config ของคุณด้วย PATH หรือสภาพแวดล้อมใดก็ตามที่ทำลายบริการก่อนหน้านี้คุณยังคงต้องใช้launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plistสองขั้นตอนเก่าเนื่องจากคำuncacheสั่งย่อยของเอกสารคู่มือมีผลต่อไปนี้:

คำสั่งยังไม่ได้ใช้งาน

Yay สำหรับกลยุทธ์การเผยแพร่โพสต์งานของ Apple: "ย้ายอย่างรวดเร็วและทำลายสิ่งต่าง ๆ "


sudo launchctl debugทางออกด้วยCould not find domain forสำหรับฉัน
Tom
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.