Bagaimana cara mengaktifkan launchd logging di OS X?

35

Bagaimana cara mengaktifkan launchd logging di OS X 10.6?

Saya menambahkan daemon baru yang tidak memulai dengan benar (statusnya adalah 1).

Saya ingin men-debug masalah tetapi saya tidak dapat menemukan launchdlog, mereka tidak masuk /var/log/launchd.log.

Sorin
sumber

Jawaban:

26

Saya menemukan solusinya

 sudo launchctl log level debug 

dan setelah ini

 tail -f /var/log/system.log
Sorin
sumber
1
Saya menyadari bahwa OS ini membutuhkan admin, sama seperti yang lainnya. Benar-benar mencari ini setelah seharian berteriak "WTF di mana bendera verbose!" OSX batu, tentu saja, tetapi sulit untuk ditangani. Thx +1
chiggsy
Tindak lanjut, FYI: Ini bekerja dengan OS X 10.7.2 juga. Terima kasih.
Alan W. Smith
Saya telah mengalami masalah dengan server Leopard saya dan saya pikir ada yang tidak beres dengan launchd launchist saya (walaupun plist yang sama berfungsi di Snow Leopard). Saya kebetulan menemukan ini dan itu bekerja seperti pesona :)
icasimpan
27
Ini tidak lagi berfungsi sejak 10,10 Yosemite. versi launchctl: Darwin System Bootstrapper 2.0.0: Sel 9 Sep 16:30:56 PDT 2014
JeanMertz
9
@JeanMertz - ada alternatif?
Umang
20

Dengan asumsi Anda mencoba untuk log proses Anda daripada launchd itu sendiri, jika Anda memasukkan baris berikut dalam file plist launchd:

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

dan memuat kembali prosesnya, setiap pencatatan atau pencetakan yang Anda miliki di dalam skrip Anda akan ditangkap dalam salah satu dari dua file itu setiap kali dijalankan. meskipun memutar file tampaknya terserah Anda. seperti yang Anda harapkan, jika Anda menggunakan file yang sama di kedua contoh, itu akan mencatat kesalahan dan stdout ke tempat yang sama.

Lihat: bagian Debugging launchd Jobs di Creating Launch Daemon dan Agents .

Peter
sumber
17

Pada OS X 10.11 (El Capitan), Anda dapat menggunakan sudo launchctl debug <service-target> --stdout --stderruntuk mengaktifkan pencatatan sekali saja, jika Anda tidak ingin mengambil opsi sistem file yang disarankan oleh @peter.

Banyak hal berbeda dalam implementasi saat ini launchctl, dan <service-target>agak aneh. Misalnya, saya memiliki layanan lokal yang saya konfigurasikan ~/Library/LaunchAgents/dev.localmon.plist, yang memiliki "label" dev.localmon. Its <service-target>adalah gui/$UID/dev.localmon, di mana $UIDadalah ID pengguna Anda, yang, karena Anda menjalankan ini pada CLI, shell Anda akan interpolasi untuk Anda.

Jadi seandainya dev.localmonlayanan saya mogok pada saat startup (itu), saya bisa memanggil yang berikut untuk launchctlmenyalurkan stdout proses dan stderr ke shell saya waktu berikutnya (dan hanya waktu berikutnya) layanan dimulai:

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

Karena itu tergantung pada TTY yang terbuka dan siap, buka terminal lain dan jalankan:

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

Kemudian, kembali di terminal pertama, Anda akan melihat hasilnya. (Anehnya, itu tidak menutup ketika proses layanan mati, jadi Anda harus Ctrl-C.)

Btw, setelah Anda memperbaiki file konfigurasi Anda dengan PATH atau lingkungan apa pun yang melanggar layanan sebelumnya, Anda masih harus menggunakan launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plistdua langkah lama karena uncachesubkomand dokumen yang diakui memiliki efek sebagai berikut:

Perintah belum diimplementasikan.

Yay untuk strategi rilis pasca-Pekerjaan Apple: "Bergerak cepat dan hancurkan sesuatu"

chbrown
sumber
sudo launchctl debugkeluar Could not find domain forbersamaku
Tom