0 votos

¿Cómo se carga e inicia un trabajo launchd sin usar un archivo plist?

La página del manual de launchctl menciona que el load y unload son subcomandos heredados, lo que implica que ya no son necesarios para cargar e iniciar un trabajo de launchd.

Sin embargo, no conozco ninguna forma de definir un trabajo launchd y sus propiedades y luego cargarlo por primera vez sin usar un archivo plist y pasarlo al load subcomando.

Hace launchctl ¿ofrece una forma de definir y cargar un trabajo utilizando sus otros subcomandos? Si es así, ¿cómo funciona?

3voto

Jose Chavez Puntos 645

Sí, ofrece ese modo, y de hecho se indica en el manual justo debajo de donde dice que los otros son heredados.

Así que, citando la página de manual de launchctl en la sección de subcomandos heredados - para los subcomandos load y unload dice:

Subcomandos alternativos recomendados: bootstrap | bootout | enable | disable

Así que esos son los subcomandos más nuevos, que quieres mirar.

He aquí algunos ejemplos:

Antes, si se utilizaba load así:

launchctl load my.plist

Ahora escribirás uno de estos:

sudo launchctl bootstrap system my.plist
launchctl bootstrap user/$(id -u) my.plist
launchctl bootstrap gui/$(id -u) my.plist

La diferencia es que ahora hay que especificar el objetivo del dominio. La diferencia es que system significa que va a ser un demonio del sistema que se ejecuta como el superusuario, en comparación con user lo que significa que se ejecutará como el usuario dado, y gui lo que significa que se ejecutará como el usuario dado, pero sólo estará activo cuando el usuario esté conectado a la interfaz gráfica de usuario. También hay un session y pid dominio de destino si tiene necesidades más avanzadas.

El $(id -u) es básicamente una mano corta para encontrar el id de tu propio usuario. Puedes ejecutar id -u en el Terminal para obtenerlo si no lo conoces, y luego puedes especificarlo manualmente como por ejemplo así:

launchctl bootstrap gui/501 my.plist

El sustituto de unload es bastante similar:

sudo launchctl bootout system my.plist
launchctl bootout user/$(id -u) my.plist
launchctl bootout gui/$(id -u) my.plist

Así que lo anterior cubre cómo pasar de los subcomandos heredados a los subcomandos recomendados en su lugar.

La segunda parte de tu pregunta es si puedes hacer esto sin usar un archivo plist. La respuesta es no. El bootstrap requiere que se especifique una ruta de servicio, que puede ser un plist, un paquete de servicios XPC - o un directorio de cualquiera de ellos. Los paquetes de servicios XPC son utilizados por los desarrolladores de aplicaciones, pero también incluyen un archivo plist - por lo que ir por ese camino no te va a salvar de tener un archivo plist.

Por supuesto, se pueden hacer varios tipos de soluciones con scripts o programas de utilidad para no tener que crear y mantener manualmente los archivos plist. Incluso podría utilizar, por ejemplo, una tubería con nombre para evitar tener que almacenar realmente el contenido del archivo plist en el disco, pero no puedo ver el beneficio práctico de eso.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X