¿Cómo asocio un launchd 2 plist con sus objetivos de dominio y servicio?

6

¿Qué son exactamente estos "dominios" y "objetivos de servicio" y cómo los asocio con las listas para su uso por launchd?

OS X 10.10 introduce una nueva API launchctl para administrar LaunchDaemons y lanzar plists. Los mensajes de registro y las páginas de manual sugieren que las claves como KeepAlive y RunAtLoad ya no deberían usarse y que los subcomandos enable ; %código%; y bootstrap se deben usar con preferencia a kickstart y load -w

Sin embargo, de las páginas man no queda claro cómo asociar un plist con el "dominio" y el "objetivo de servicio" de los que se habla y sin los cuales estos comandos no se pueden usar con los plists existentes que aparentemente eran suficientes para OS X 10.9

Por ejemplo [actualizado]: Una lista básica que estamos tratando de "lanzar"; aparentemente bootstrapped en el dominio "sistema" pero posteriormente no se reconoce en "sistema"

# pwd
/Library/LaunchDaemons
# cat com.iainhouston.django.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
     <key>Label</key>
     <string>com.iainhouston.django</string>
     <key>ProgramArguments</key>
     <array>
          <string>/usr/local/virtualenvs/django.iainhouston.com/bin/gunicorn</string>
          <string>--bind=127.0.0.1:49202</string>
          <string>--workers=2</string>
          <string>superlists.wsgi:application</string>
     </array>
     <key>Disabled</key><false/>
</dict>
</plist> 
# launchctl bootstrap system com.iainhouston.django.plist
/Library/LaunchDaemons/com.iainhouston.django.plist: Service is disabled 
# launchctl enable system/com.iainhouston.django.plist 
# launchctl kickstart system/com.iainhouston.django.plist
Could not find service "com.iainhouston.django.plist" in domain for system  

Motivación

El registro del sistema registra que unload -w se queja cuando usamos launchctl -w load ... con KeepAlive que Este servicio está definido para ejecutarse constantemente y es inherentemente ineficiente. , por lo que estamos motivados a usar nueva interfaz.
No solo eso, tenemos problemas significativos con el uso excesivo del procesador que queremos controlar al proporcionar las palabras clave adecuadas según demanda, por lo que, nuevamente, estamos motivados a entender cómo interactuar con el nuevo lanzamiento. No es fácil con los documentos. como están de pie!

    
pregunta iainH 05.12.2014 - 14:31

2 respuestas

2

Si puede, envíe un error a Apple en relación con la documentación incompleta o poco clara.

launchd parece haber reescrito para OS X 10.10 y es probable que todavía esté en Flujo para algunas versiones menores todavía.

Los dominios y los objetivos del servicio parecen ser una abstracción de las diversas carpetas disponibles para los tickets de trabajo de launchd. También permiten un medio para que los comandos launchctl se dirijan a sesiones específicas; una característica que debería permitir que un comando launchctl afecte a otras sesiones de usuario.

Sin embargo, a partir de OS X 10.10.1, la página de manual launchd.plist no hace mención de las claves KeepAlive o RunAtLoad en desuso.

Apple sugiere evitar KeepAlive y RunAtLoad porque la intención es evitar iniciar un proceso sin una garantía de trabajo por hacer. Ambas claves permanecen y son necesarias para muchas tareas.

El mejor documento de referencia sigue siendo Nota técnica TN2083, Demonios y agentes . Este documento proporciona una gran información sobre Launchd y las intenciones de Apple respecto a cómo se deben implementar los procesos en segundo plano.

    
respondido por el Graham Miln 05.12.2014 - 15:25
2

Estás cerca, pero no debes tener la parte .plist en los comandos enable y kickstart. Aquí hay un código que utilizamos para asociarlo a un dominio y objetivo de servicio para un usuario. $ UID es básicamente tu ID de usuario.

launchctl bootstrap gui/$UID /Library/LaunchAgents/com.yourcompany.yourapp.plist
launchctl enable gui/$UID/com.yourcompany.yourapp
launchctl kickstart -k gui/$UID/com.yourcompany.yourapp
    
respondido por el Ken Aspeslagh 05.12.2014 - 23:00

Lea otras preguntas en las etiquetas