Câu trả lời:
Tôi tìm thấy giải pháp
sudo launchctl log level debug
và sau này
tail -f /var/log/system.log
Giả sử bạn đang cố gắng ghi nhật ký quá trình của mình thay vì tự khởi chạy, nếu bạn bao gồm các dòng sau trong tệp plist launchd:
<key>StandardOutPath</key>
<string>/path/to/logfile.log</string>
<key>StandardErrorPath</key>
<string>/path/to/another_logfile.log</string>
và tải lại quá trình, mọi ghi nhật ký hoặc in mà bạn có nội bộ vào tập lệnh của mình sẽ được ghi lại ở một trong hai tệp đó bất cứ khi nào nó được chạy. mặc dù xoay các tập tin dường như là tùy thuộc vào bạn. như bạn có thể mong đợi, nếu bạn sử dụng cùng một tệp trong cả hai trường hợp, nó sẽ ghi cả lỗi và thiết bị xuất chuẩn vào cùng một vị trí.
Xem: Gỡ lỗi phần Công việc khởi động tại Tạo Daemons và Đại lý .
Trên OS X 10.11 (El Capitan), bạn có thể sử dụng sudo launchctl debug <service-target> --stdout --stderr
để bật ghi nhật ký một lần, nếu bạn không muốn dùng tùy chọn hệ thống tệp được đề xuất bởi @peter.
Rất nhiều thứ khác nhau trong cách thực hiện hiện tại launchctl
, và đó <service-target>
là loại lạ. Ví dụ: giả sử tôi có một dịch vụ cục bộ mà tôi định cấu hình ~/Library/LaunchAgents/dev.localmon.plist
, có "nhãn" dev.localmon
. Của nó <service-target>
là gui/$UID/dev.localmon
, nơi $UID
là ID người dùng của bạn, trong đó, kể từ khi bạn đang chạy này tại CLI, vỏ của bạn sẽ suy cho bạn.
Vì vậy, giả sử dev.localmon
dịch vụ của tôi bị sập khi khởi động (đó là), tôi có thể gọi những điều sau đây để launchctl
đưa thiết bị xuất chuẩn của thiết bị vào stderout vào lần sau (và chỉ lần sau) dịch vụ bắt đầu:
sudo launchctl debug gui/$UID/dev.localmon --stdout --stderr
Vì nó bị treo với các TTY mở và sẵn sàng, đi đến một thiết bị đầu cuối khác và chạy:
launchctl start dev.localmon
# start is a legacy command and doesn't use the fancy new service-target notation
Sau đó, trở lại trong thiết bị đầu cuối đầu tiên, bạn sẽ thấy đầu ra. (Kỳ lạ, nó không đóng khi quá trình dịch vụ chết, vì vậy bạn sẽ phải Ctrl-C.)
Btw, một khi bạn sửa tệp cấu hình của mình với bất kỳ PATH hoặc môi trường nào đã phá vỡ dịch vụ trước đó, bạn vẫn phải sử dụng launchctl unload ~/Library/LaunchAgents/dev.localmon.plist && launchctl load ~/Library/LaunchAgents/dev.localmon.plist
hai bước cũ vì uncache
tiểu ban có mục đích của tài liệu có tác dụng sau:
Lệnh chưa được thực hiện.
Yay cho chiến lược phát hành sau công việc của Apple: "Di chuyển nhanh và phá vỡ mọi thứ"
sudo launchctl debug
thoát với Could not find domain for
tôi