Systemd: requiere vs quiere

Pregunta:

¿Hay alguna diferencia entre los requisitos y los deseos en los archivos de destino?

[Unit]
Description=Graphical Interface 
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service

Gracias

Respuesta:

Como señaló heemayl en el comentario, la página de manual responde a su pregunta. Desde la web:

Quiere =

Una versión más débil de Requiere =. Las unidades enumeradas en esta opción se iniciarán si la unidad de configuración es. Sin embargo, si las unidades enumeradas no se inician o no se pueden agregar a la transacción, esto no tiene ningún impacto en la validez de la transacción en su conjunto. Ésta es la forma recomendada de conectar la puesta en marcha de una unidad con la puesta en marcha de otra unidad.

Y

Requiere =

Configura las dependencias de requisitos de otras unidades. Si esta unidad se activa, las unidades enumeradas aquí también se activarán. Si una de las otras unidades se desactiva o su activación falla, esta unidad se desactivará. Esta opción se puede especificar más de una vez o se pueden especificar varias unidades separadas por espacios en una opción, en cuyo caso se crearán dependencias de requisitos para todos los nombres enumerados. Tenga en cuenta que las dependencias de los requisitos no influyen en el orden en que se inician o detienen los servicios. Esto debe configurarse de forma independiente con las opciones Después = o Antes =. Si una unidad foo.service requiere una unidad bar.service configurada con Requiere = y no se configura ningún pedido con Después = o Antes =, entonces ambas unidades se iniciarán simultáneamente y sin demora entre ellas si foo.service está activado. A menudo, es una mejor opción usar Wants = en lugar de Require = para lograr un sistema que sea más robusto cuando se trata de servicios que fallan.

Tenga en cuenta que este tipo de dependencia no implica que la otra unidad siempre tenga que estar en estado activo cuando esta unidad está funcionando. Específicamente: las comprobaciones de condición fallidas (como ConditionPathExists =, ConditionPathExists =,… – ver más abajo) no hacen que falle el trabajo de inicio de una unidad con una dependencia Require = de ella. Además, algunos tipos de unidades pueden desactivarse por sí solos (por ejemplo, un proceso de servicio puede decidir salir limpiamente o el usuario puede desconectar un dispositivo), lo que no se propaga a las unidades que tienen una dependencia Require =. Utilice el tipo de dependencia BindsTo = junto con After = para asegurarse de que una unidad nunca esté en estado activo sin otra unidad específica también en estado activo (ver más abajo).

Desde la página freedesktop.org

Su servicio solo comenzará si se ha alcanzado el multi-user.target (no sé qué sucede si intenta agregarlo a ese objetivo), y systemd intentará iniciar el display-manager.service antes de su servicio . Si display-manager.service falla por cualquier motivo, su servicio aún se iniciará (por lo tanto, si realmente necesita el administrador de pantalla, use Requires= para eso). Sin embargo, si no se alcanza el multi-user.target , su servicio no se iniciará.

Cual es tu servicio? ¿Es un sistema de quiosco? Intuitivamente, supongo que desea agregar su servicio al multi-user.target (por lo que se inicia al inicio), y hacer que dependa estrictamente del display-manager.service a través de Requires=display-manager.service . Pero eso es solo una adivinación salvaje ahora.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım