Как проверить, установлен ли флаг "отключен" в OS X для запускаемых сервисов?
Согласно справочной странице для launchctl
(выделение мое):
-w Переопределяет ключ Disabled и устанавливает его в значение false. В предыдущих версиях этот параметр изменял файл конфигурации. Теперь состояние ключа Disabled хранится в другом месте на диске.
Поскольку текущее состояние отключенного флага больше не устанавливается в .plist
сам файл, проверяя наличие Disabled
ключ больше не является точным способом определить, будет ли служба работать при следующей загрузке.
Где это "в другом месте на диске"? Более конкретно (и что более важно), как проверить, установлен ли этот флаг?
Кроме того, возможно ли настроить службу для запуска при следующей загрузке, не заставляя ее запускаться немедленно (как с launchctl load -w /Library/LaunchDaemons/my-service.plist
)?
3 ответа
Отключения теперь (по состоянию на 10.6.x) хранятся в /private/var/db/launchd.db/com.apple.launchd/overrides.plist в виде записей вроде:
<key>com.apple.AppleFileServer</key>
<dict>
<key>Disabled</key>
<true/>
</dict>
Вы можете проанализировать этот файл, чтобы увидеть, какие запускаемые элементы переопределены, но для файла установлен только root-доступ ("-rw------- 1 root wheel"), и нет никаких гарантий, что Apple не изменит то, как вещи снова хранятся в 10,7...
Кроме того, я не знаю, как разрешить загрузку существующего запускаемого элемента при следующей загрузке, не загружая его сразу. (Если это новый элемент, нет проблем: убедитесь, что в нем есть Disabled=false, и поместите его в /Library/LaunchDaemons.)
Для новых версий macOS, launchctl
синтаксис и команды изменились.
Следующее было протестировано на MacOS High Sierra (10.13.4
):
launchctl print user/$(id -u)
# For GUI domain (effectively "flat" with login domain)
# See man launchctl for details
launchctl print gui/$(id -u)
Вы можете просмотреть множество свойств сервисов в системе, привязанной к вашему пользователю, с вариантами launchctl print
а также launchctl list
команды. Например, чтобы увидеть состояние отключенного флага, найдите раздел, подобный следующему:
disabled services = {
{
"com.apple.macbuddy.icloudsetup.user" => false
"com.apple.ManagedClientAgent.enrollagent" => true
"com.apple.FileStatsAgent" => false
"com.apple.FolderActionsDispatcher" => true
"homebrew.mxcl.postgresql" => false
"com.apple.appleseed.seedusaged.postinstall" => true
"homebrew.mxcl.mysql" => false
}
Остерегаться!
Несмотря на то, что я использовал графический интерфейс LaunchControl Launchd для добавления метки «Отключено» , мой агент все равно запускался!
Ваш комментарий , процитированный здесь Charles Duffy
«Поскольку текущее состояние отключенного флага больше не устанавливается в самом файле .plist, проверка ключа Disabled больше не является точным способом определить, будет ли служба работать при следующей загрузке».
ТЛ;ДР
Окончательная отключенная проверка
$ launchctl print-disabled user/$(id -u) |grep true