Como verificar se o sinalizador "desabilitado" do OS X para serviços launchd está definido?

8

De acordo com a página de manual para launchctl(ênfase minha):

   -w Substitui a chave Disabled e a define como false. Nas versões anteriores, essa opção modifica o arquivo de configuração. Agora, o estado da chave Desativado é armazenado em outro local do disco.

Como o estado atual do sinalizador desativado não está mais definido no .plistpróprio arquivo, verificar a Disabledchave não é mais uma maneira precisa de saber se o serviço será executado na próxima inicialização.

Onde está esse "outro lugar no disco"? Mais precisamente (e mais importante), como verificar se esse sinalizador está definido?

Além disso, é possível definir um serviço para ser executado na próxima inicialização sem forçar a inicialização imediata (como acontece com launchctl load -w /Library/LaunchDaemons/my-service.plist)?

Charles Duffy
fonte

Respostas:

8

Agora, as desabilitações são (a partir do 10.6.x) armazenadas em /private/var/db/launchd.db/com.apple.launchd/overrides.plist, como entradas como:

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

Você pode analisar esse arquivo para ver quais itens launchd são substituídos, mas o arquivo está definido como somente acesso root ("-rw ------- 1 root root"), e não há garantia de que a Apple não mude como as coisas são armazenadas novamente em 10.7 ...

Além disso, não conheço nenhuma maneira de permitir que um item launchd existente seja carregado na próxima inicialização sem precisar carregá-lo imediatamente. (Se for um item novo, não há problema: verifique se ele possui Disabled = false nele e solte-o em / Library / LaunchDaemons.)

Gordon Davisson
fonte
2
parece que passar 10.11 :( qualquer idéia para a resposta atualizado sobre 10.11?
Peter Lapisu
0

Para novas versões do macOS, a launchctl sintaxe e os comandos foram alterados .

O seguinte foi testado no 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)

Você pode visualizar muitas propriedades dos serviços no sistema conectado ao seu usuário com variantes dos comandos launchctl printe launchctl list. Por exemplo, para ver o estado do sinalizador desativado, procure uma seção como esta:

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
fonte
há tambémlaunchctl print system/{service-name}
wisbucky 10/07/19