Làm cách nào để kích hoạt đăng nhập launchd trên OS X?


35

Làm cách nào để kích hoạt đăng nhập launchd trên OS X 10.6?

Tôi đã thêm một trình nền mới không bắt đầu đúng (trạng thái là 1).

Tôi muốn gỡ lỗi nhưng tôi không thể tìm thấy launchdnhật ký, chúng không có trong đó /var/log/launchd.log.

Câu trả lời:


26

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

1
Tôi đã nhận ra rằng hệ điều hành này cần quản trị viên, giống như mọi thứ khác. Đã hoàn toàn tìm kiếm điều này sau một ngày la hét "WTF đâu là lá cờ dài!" OSX đá, chắc chắn, nhưng khó khăn để có được một xử lý trên. Thx +1
chiggsy

Theo dõi, FYI: Điều này cũng hoạt động với OS X 10.7.2. Cảm ơn.
Alan W. Smith

Tôi đã gặp sự cố với các máy chủ Leopard của mình và tôi nghĩ rằng có điều gì đó không ổn với trình khởi chạy của tôi (mặc dù cùng một hoạt động trong Snow Leopard). Tôi tình cờ vấp phải điều này và nó hoạt động như bùa mê :)
icasimpan

27
Điều này không còn hoạt động kể từ 10.10 Yosemite. phiên bản launchctl: Darwin System Bootstrapper 2.0.0: Thứ ba ngày 9 tháng 9 16:30:56 PDT 2014
JeanMertz

9
@JeanMertz - có sự thay thế nào không?
Umang

20

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ý .


17

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>gui/$UID/dev.localmon, nơi $UIDlà 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.localmondị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.plisthai bước cũ vì uncachetiể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 debugthoát với Could not find domain fortôi
Tom
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.