¿Cómo se comprueba si se establece el indicador OS X "deshabilitado" para los servicios de launchd?

8

De acuerdo con la página del manual para launchctl(énfasis mío):

   -w Anula la clave deshabilitada y la establece en falsa. En versiones anteriores, esta opción modificaría el archivo de configuración. Ahora el estado de la clave Disabled se almacena en otro lugar en el disco.

Debido a que el estado actual del indicador deshabilitado ya no se establece en el .plistarchivo en sí, verificar la Disabledclave ya no es una forma precisa de saber si el servicio se ejecutará en el próximo arranque.

¿Dónde está este "otro lugar en el disco"? Más al punto (y más importante), ¿cómo se comprueba si esta bandera está activada?

Además, ¿es posible configurar un servicio para que se ejecute en el próximo arranque sin forzarlo a comenzar de inmediato (como con launchctl load -w /Library/LaunchDaemons/my-service.plist)?

Charles Duffy
fuente

Respuestas:

8

Las inhabilitaciones ahora se almacenan (a partir de 10.6.x) en /private/var/db/launchd.db/com.apple.launchd/overrides.plist, como entradas como:

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

Puede analizar este archivo para ver qué elementos de launchd se anulan, pero el archivo está configurado solo para acceso raíz ("-rw ------- 1 rueda raíz"), y no hay garantía de que Apple no cambie cómo las cosas se almacenan nuevamente en 10.7 ...

Además, no conozco ninguna forma de permitir que un elemento de lanzamiento existente se cargue en el próximo arranque sin cargarlo de inmediato. (Si se trata de un elemento nuevo, no hay problema: asegúrese de que tiene Disabled = false y colóquelo en / Library / LaunchDaemons).

Gordon Davisson
fuente
2
parece que se movió el 10.11 :( ¿alguna idea para la respuesta actualizada el 10.11?
Peter Lapisu
0

Para las nuevas versiones de macOS, la launchctl sintaxis y los comandos han cambiado .

Lo siguiente fue probado en 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)

Puede ver muchas propiedades de servicios en el sistema conectado a su usuario con variantes de los comandos launchctl printy launchctl list. Por ejemplo, para ver el estado del indicador deshabilitado, busque una sección 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
fuente
también haylaunchctl print system/{service-name}
wisbucky