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

8

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

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

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

Где это "в другом месте на диске"? Более конкретно (и что более важно), как проверить, установлен ли этот флаг?

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

Чарльз Даффи
источник

Ответы:

8

Отключения теперь (по состоянию на 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.)

Гордон Дэвиссон
источник
2
похоже, что он переместится на 10.11 :(
Есть
0

В новых версиях 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
}
TrinitronX
источник
есть такжеlaunchctl print system/{service-name}
wisbucky