Ошибка SMJobBless с кодом CFErrorDomainLaunchd 9
Кто-нибудь знает, что означает этот код ошибки? Я получаю ошибку SMJobBless с этим значением кода возврата.
Failed to bless helper: Error Domain=CFErrorDomainLaunchd Code=9 "The operation couldn’t be completed. (CFErrorDomainLaunchd error 9.)"
Я погуглил, посмотрел ответы в блогах, в Apple Docs, вот там и не смог найти ответ что это и как это исправить. Люди говорят (на каком-то форуме поддержки, что переустановка OS X помогла им).
Это произошло в моем текущем проекте уже пару недель назад, и единственное, что помогло мне исправить это, было изменение названия моего вспомогательного инструмента. Теперь это случилось снова.
В то же время мой код работает на других компьютерах, эта проблема затрагивает только мою рабочую станцию.
Обновление: после переименования снова работает. Теперь у меня есть два идентификатора набора вспомогательных инструментов, "заблокированных" в моей системе:-(
Обновление 2: это происходит и на других компьютерах:-(
2 ответа
В моем случае ошибка
Не удалось благословить помощника: Ошибка Domain=CFErrorDomainLaunchd Code=9 "Операция не может быть завершена. (CFErrorDomainLaunchd error 9.)"
означало, что вспомогательный инструмент был добавлен в список постоянно отключенных сервисов здесь:
/private/var/db/com.apple.xpc.launchd/disabled.plist
Я говорю для Yosemite, более старые / младшие версии ОС могут иметь их здесь (я не проверял):
/var/db/launchd.db/com.apple.launchd.peruser.*user_id*/overrides.plist
После прочтения справочной страницы launchctl я обнаружил, что аргумент подкоманды "unload" -w добавляет сервис к этому plist-файлу. Я использовал этот флаг в своем скрипте удаления, что привело к невозможности использования инструмента "благословение" в следующий раз.
Кажется, нет никакого способа удалить службу из этого файла disabled.plist. При каждой перезагрузке файл восстанавливается из кеша launchd, и очистка кеша, похоже, еще не реализована. Службу можно включить только навсегда, поэтому launchd не остановит ее запуск.
Вот несколько ссылок, которые могут быть полезны для тех, кто столкнется с подобной проблемой:
- http://comments.gmane.org/gmane.comp.sysutils.launchd.devel/117
- http://launchd.info/
- Отличное приложение для управления запущенными задачами: http://www.soma-zone.com/LaunchControl/
man launchctl
С High Sierra (и, вероятно, раньше, но я не знаю с тех пор, когда), есть несколько вспомогательных подкоманд для launchctl.
launchctl print-disabled system
перечислит явно отключенные сервисы. Обязательно проверьте false
/true
значение.
Чтобы включить отключенную службу
sudo launchctl enable system/com.example.service
Кроме того, для записей, в /System/Library/Frameworks/ServiceManagement.framework/Versions/A/Headers/SMErrors.h
можно прочитать:
enum {
kSMErrorInternalFailure = 2,
kSMErrorInvalidSignature,
kSMErrorAuthorizationFailure,
kSMErrorToolNotValid,
kSMErrorJobNotFound,
kSMErrorServiceUnavailable,
kSMErrorJobPlistNotFound,
kSMErrorJobMustBeEnabled,
kSMErrorInvalidPlist,
};
где код 9 (kSMErrorJobMustBeEnabled
) имеет больше смысла, чем "Операция не может быть завершена".