Agrupación de servicios systemd

10

He escrito alrededor de media docena de .servicearchivos para las diferentes partes que componen el sistema en el que estoy trabajando. Es útil poder iniciar todo el sistema por etapas, pero también me gustaría tener una sola unidad que inicie todo el sistema en una sola llamada systemctl.

¿Cuál es la mejor manera de hacer esto?

Magnus
fuente

Respuestas:

10

Desea una unidad de tipo objetivo , con todas las unidades de servicio listadas como Wants=dependencias. Entonces lo comienzas a usar systemctl start unitname.target. (Asegúrese de no usar systemctl isolateaquí; eso cerrará todo excepto lo que está en el árbol de dependencia de sus servicios, que presumiblemente no desea).

Tom Hunt
fuente
Alternativamente, puede usar la WantedByclave en la [Install]sección y observar un objetivo ya existente. Por ejemplo, si desea que sus servicios siempre se inicien antes de que otros usuarios puedan iniciar sesión, use multi-user.target.
saiarcot895
Sí, el tipo de destino con la Wants=lista de todos los servicios parece suficiente para comenzar , sin embargo, parece que no puedo encontrar ninguna manera de detener y reiniciar el trabajo utilizando un tipo de destino. ¿Hay algún tipo que lo permita?
Magnus
Magnus, ¿alguna vez encontraste una buena solución para esto?
Sam Hendley
2
Sam, Magnus: Parece que la detención de los servicios objeto de una .targetse puede hacer usando StopWhenUnneeded=yesen cada uno de los .servicearchivos. superuser.com/questions/470153/...
jonnor
1
En mi caso particular, puedo hacer uso de las herramientas systemd que manejan el bloqueo global :) Entonces, para comenzar, uso ay .targetpara detenerlo systemctl stop foo.\*(ya que todos los servicios involucrados tienen archivos de servicio que comienzan con ingenio foo.).
Magnus
2

¿Has intentado usar PartOfen las subunidades del grupo objetivo además de Wantsen el objetivo? Ej: PartOf=foo.targetadentro foo-sub1.servicey Wants=foo-sub1.service foo-sub2.serviceadentro foo.target. Acabo de intentar esto y pude iniciar y detener todas mis subunidades simplemente iniciando y deteniendo el objetivo.

PartOf =

Configura dependencias similares a Requiere =, pero se limita a detener y reiniciar unidades. Cuando systemd detiene o reinicia las unidades enumeradas aquí, la acción se propaga a esta unidad. Tenga en cuenta que esta es una dependencia unidireccional: los cambios en esta unidad no afectan a las unidades enumeradas.

Cuando PartOf = b.service se usa en a.service, esta dependencia se mostrará como ConsistsOf = a.service en la lista de propiedades de b.service. ConsistsOf = la dependencia no se puede especificar directamente.

Benny Jobigan
fuente
¡Bienvenido a U&L! Si su publicación no proporciona una respuesta a la pregunta, entonces debe publicarse en la sección de Comentarios debajo de la pregunta.
Yurij Goncharuk
Esto proporciona la otra mitad de la respuesta dada por Tom Hunt: la capacidad de detener un grupo completo de servicios.
Benny Jobigan el