ฉันจะเปิดใช้งานการบันทึก Launchd บน OS X 10.6 ได้อย่างไร
ฉันเพิ่มภูตใหม่ที่ไม่เริ่มทำงานอย่างถูกต้อง (สถานะคือ1
)
ฉันต้องการที่จะแก้ปัญหาปัญหา แต่ผมไม่สามารถที่จะหาบันทึกพวกเขาจะไม่ได้อยู่ในlaunchd
/var/log/launchd.log
ฉันจะเปิดใช้งานการบันทึก Launchd บน OS X 10.6 ได้อย่างไร
ฉันเพิ่มภูตใหม่ที่ไม่เริ่มทำงานอย่างถูกต้อง (สถานะคือ1
)
ฉันต้องการที่จะแก้ปัญหาปัญหา แต่ผมไม่สามารถที่จะหาบันทึกพวกเขาจะไม่ได้อยู่ในlaunchd
/var/log/launchd.log
คำตอบ:
ฉันพบวิธีแก้ปัญหา
sudo launchctl log level debug
และหลังจากนี้
tail -f /var/log/system.log
สมมติว่าคุณกำลังพยายามบันทึกกระบวนการของคุณแทนที่จะเรียกใช้งานตัวเองหากคุณรวมบรรทัดต่อไปนี้ในไฟล์ Plistplist:
<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>
และโหลดกระบวนการบันทึกหรือการพิมพ์ใด ๆ ที่คุณมีภายในสคริปต์ของคุณจะถูกบันทึกเป็นหนึ่งในสองไฟล์เหล่านี้เมื่อใดก็ตามที่มีการเรียกใช้ แม้ว่าการหมุนไฟล์จะขึ้นอยู่กับคุณ อย่างที่คุณคาดหวังถ้าคุณใช้ไฟล์เดียวกันในทั้งสองกรณีมันจะบันทึกทั้งข้อผิดพลาดและ stdout ไปที่เดียวกัน
ดู: การแก้จุดบกพร่อง launchd ส่วนงานที่สร้างเปิดตัวภูตและตัวแทน
บน 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
ID ผู้ใช้ของคุณซึ่งเมื่อคุณใช้งานที่ 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
สำหรับฉัน