¿Qué son exactamente estos "dominios" y "objetivos de servicio" y cómo los asocio con plists para que los use launchd?
OS X 10.10 presenta una nueva launchctl
API para administrar LaunchDaemons y lanzar plists. Los mensajes de registro y las páginas del manual sugieren que las teclas like KeepAlive
y RunAtLoad
ya no deben usarse y que los subcomandos enable
; bootstrap
; y kickstart
debe usarse con preferencia a load -w
yunload -w
Sin embargo, no está claro en las páginas del manual cómo asociar una plist con el "dominio" y el "objetivo del servicio" de los que habla y sin los cuales estos comandos no se pueden usar con las plist existentes que aparentemente eran suficientes para OS X 10.9
Por ejemplo [actualizado]: Un plist básico que estamos tratando de "lanzar"; aparentemente arrancado en el dominio del "sistema" pero posteriormente no reconocido en el "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
Los registros de registro del sistema que launchctl -w load ...
se quejan cuando usamos KeepAlive
con RunAtLoad
ese Este servicio está definido para estar en ejecución constante y es intrínsecamente ineficiente. por lo que estamos motivados para usar la nueva interfaz.
No solo eso, tenemos problemas significativos con el uso excesivo del procesador que queremos controlar al proporcionar las palabras clave adecuadas a pedido, por lo que, nuevamente, estamos motivados para comprender cómo interactuar con el nuevo launchd ... no es fácil con los documentos tal como están!
Si puede, informe un error a Apple con respecto a la documentación incompleta o poco clara.
launchd
parece haber sido reescrito para OS X 10.10 y es probable que aún esté cambiando para algunas versiones menores.
Los objetivos de dominios y servicios parecen ser una abstracción de las diversas carpetas disponibles para los tickets de trabajo de lanzamiento. También permiten un medio para que los comandos launchctl se dirijan a sesiones específicas; una función 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 del manual no menciona las claves launchd.plist
obsoletas KeepAlive
o .RunAtLoad
Apple sugiere evitar KeepAlive
y RunAtLoad
porque la intención es evitar que se inicie un proceso sin una garantía de trabajo por realizar. Ambas claves permanecen y son necesarias para muchas tareas.
El mejor documento de referencia sigue siendo la Nota técnica TN2083, Daemons and Agents . Este documento proporciona una gran perspectiva sobre el lanzamiento y las intenciones de Apple sobre cómo deben implementarse los procesos en segundo plano.
Está cerca, pero no debería tener la parte .plist en los comandos enable y kickstart. Aquí hay un código que usamos para asociarlo a un objetivo de dominio y servicio para un usuario. $UID es básicamente su 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
unbootstrap
aun no implementado; stop
y disable
parecen no tener efecto y kill
no reconoce ni SIGTERM
ni SIGKILL
....
iainH
RunAtLoad
: "Esta clave debe evitarse, ya que los inicios de trabajos especulativos tienen un efecto adverso en los escenarios de inicio del sistema e inicio de sesión del usuario". Sin embargo, no hay ejemplos de tipos de trabajo ni sugerencias de uso. Muy insatisfactorio.iainH
graham miln
RunAtLoad
yKeepAlive
permanecen, pero simplemente se les desaconseja. Algunas tareas requieren estos comportamientos, pero siempre que sea posible, Apple claramente quiere que los ingenieros reconsideren el enfoque predeterminado. Un empujón en lugar de un absoluto. Gracias por archivar y señalar el error.iainH
KeepAlive
conRunAtLoad
eso "Este servicio está definido para estar en ejecución constante y es intrínsecamente ineficiente". por lo que estamos motivados para usar la nueva interfaz. No solo eso, tenemos problemas con el uso excesivo del procesador que queremos controlar al proporcionar las palabras clave adecuadas a pedido, por lo que, nuevamente, estamos motivados para comprender cómo interactuar con el nuevo launchd ... no es fácil con los documentos como ellos permanecen.