Назад | Перейти на главную страницу

Как проверить, установлен ли в OS X флаг «отключено» для запущенных служб?

Согласно странице руководства для launchctl (курсив мой):

-w Переопределяет ключ Disabled и устанавливает для него значение false. В предыдущих версиях этот параметр изменял файл конфигурации. Теперь состояние ключа Disabled хранится в другом месте на диске.

Поскольку текущее состояние отключенного флага больше не устанавливается в .plist сам файл, проверяя наличие Disabled key больше не является точным способом определить, будет ли служба работать при следующей загрузке.

Где это «где-нибудь на диске»? Если говорить более конкретно (и что более важно), как проверить, установлен ли этот флаг?

Кроме того, можно ли настроить запуск службы при следующей загрузке без принудительный запуск немедленно (как с launchctl load -w /Library/LaunchDaemons/my-service.plist)?

Отключения теперь (начиная с 10.6.x) хранятся в /private/var/db/launchd.db/com.apple.launchd/overrides.plist в виде записей вроде:

<key>com.apple.AppleFileServer</key>
<dict>
    <key>Disabled</key>
    <true/>
</dict>

Вы можете проанализировать этот файл, чтобы увидеть, какие элементы launchd переопределены, но для файла установлен только root-доступ («-rw ------- 1 root wheel»), и нет гарантии, что Apple не изменит способ вещи снова сохраняются в 10.7 ...

Кроме того, я не знаю способа включить существующий элемент launchd для загрузки при следующей загрузке без немедленной его загрузки. (Если это новый элемент, нет проблем: убедитесь, что в нем стоит 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
}