Tôi có một LaunchDaemon. Khi nó chạy, nó sẽ kiểm tra nếu SIMBL được cài đặt. Nếu SIMBL không được cài đặt, nó sử dụng NSTask để chạy/usr/sbin/installer trên SIMBL.pkg.Làm thế nào bạn có thể khởi động LaunchAgent lần đầu tiên mà không cần khởi động lại, khi mã của bạn chạy dưới dạng LaunchDaemon?
kịch bản postflight SIMBL của sau đó cố gắng để chạy một lệnh tải launchctl để bắt đầu LaunchAgent SIMBL ngay lập tức:
sudo -u "$USER" -- /bin/launchctl load -F -S Aqua -D user "${LAUNCHD_PLIST}"
này thất bại, bởi vì môi trường NSTask LaunchDaemon tôi không có $ USER bộ.
Nếu tôi có daemon tôi phát hiện người sử dụng hiện tại với khung System Configuration và vượt qua nó để NSTask với setEnvironment, launchctl lỗi trên tôi:
Bug: launchctl.c:2325 (23930):13: (dbfd = open(g_job_overrides_db_path, O_RDONLY | O_EXLOCK | O_CREAT, S_IRUSR | S_IWUSR)) != -1
Tôi nhận ra một daemon, theo định nghĩa, nên không hoạt động trong phiên người dùng. Theo cùng một mã thông báo, Apple dường như đề xuất LaunchAgents làm đối tượng trợ giúp cho LaunchDaemons, để thực hiện công việc của người dùng đó. Có cách nào để có được một đại lý như vậy và chạy ngay lập tức?
Tôi có tất cả các địa chỉ .plists ở đúng nơi (chúng bắt đầu chạy sau khi khởi động lại, lần tiếp theo launchctl thực hiện tải thường xuyên) vì vậy ý tưởng đầu tiên của tôi là chỉ cần cho launchctl tải lại. Nhưng all the code to do that is commented out in launchctl.c:
// { "reload", reload_cmd, "Reload configuration files and/or directories" },
...
* In later versions of launchd, I hope to load everything in the first pass,
* then do the Bonjour magic on the jobs that need it, and reload them, but for now,
* I haven't thought through the various complexities of reloading jobs, and therefore
* launchd doesn't have reload support right now.
Với OS X "El Capitan" 10.11 (15A204h) có vẻ như "launchctl bsexec" không hoạt động nữa.Có lý do tại sao bước này là bắt buộc không? – yairchu
Đó là phần khởi động lại tác nhân ở đúng ngữ cảnh. Nếu không có điều đó, bạn không khởi động lại như OP được yêu cầu. Tôi không biết cách nào (nếu có) điều này có thể xảy ra vào ngày 10.11. –
có vẻ như có một cách để làm điều đó trên 10.11: 'launchctl bootstrap gui/\' stat -f% u \ ''. từ http://stackoverflow.com/questions/1106638/starting-stopping-a-launchd-agent-for-all-users-with-gui-sessions#comment51143118_31534614 –
yairchu