Como se verifica se o sinalizador “desabilitado” do OS X para serviços launchd está configurado?

7

De acordo com a página man do launchctl (ênfase minha):

   -w   Overrides the Disabled key and sets it to false. In previous versions, this option would modify the configuration file. Now the state of the Disabled key is stored elsewhere on-disk.

Como o estado atual do sinalizador desativado não está mais definido no próprio arquivo .plist , a verificação da chave Disabled não é mais uma maneira correta de informar se o serviço será executado na próxima inicialização.

Onde isso está "em outro lugar no disco"? Mais ao ponto (e mais importante), como se verifica se este sinalizador está definido?

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

    
por Charles Duffy 04.01.2011 / 03:48

2 respostas

8

As desativações agora (a partir de 10.6.x) são 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 de inicialização são substituídos, mas o arquivo está definido somente como root ("-rw ------- 1 root wheel"), e não há garantia de que a Apple venceu ' t mudar a forma 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 novo item, não há problema: verifique se ele tem Disabled = false e solte-o em / Library / LaunchDaemons.)

    
por 04.01.2011 / 19:08
0

Para novas versões do macOS, launchctl sintaxe e 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 exibir muitas propriedades de serviços no sistema anexado ao seu usuário com variantes dos comandos launchctl print e 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
}
    
por 03.05.2018 / 20:18