tagger tag picard musica brainz linux systemd

linux - tag - musica brainz picard



Cómo reiniciar un servicio si se reinicia su servicio dependiente (3)

Creo que la opción necesaria es BindsTo, que también maneja los malos comportamientos.

[Unit] Requires=postgresql.service After=postgresql.service BindsTo=postgresql.service

BindsTo =

Configura dependencias de requisitos, muy similares en estilo a las requeridas =. Sin embargo, este tipo de dependencia es más fuerte: además del efecto de Requiere =, declara que si la unidad vinculada está detenida, esta unidad también se detendrá. Esto significa que una unidad vinculada a otra unidad que de repente entra en estado inactivo también se detendrá. Las unidades pueden entrar repentinamente, inesperadamente, al estado inactivo por diferentes motivos: el proceso principal de una unidad de servicio puede finalizar por su propia elección, el dispositivo de respaldo de una unidad de dispositivo puede estar desenchufado o el punto de montaje de una unidad de montaje puede desmontarse sin la participación de El administrador de sistemas y servicios.

Cuando se usa junto con After = en la misma unidad, el comportamiento de BindsTo = es aún más fuerte. En este caso, la unidad obligada a estar estrictamente debe estar en estado activo para que esta unidad también esté en estado activo. Esto no solo significa que una unidad vinculada a otra unidad que repentinamente entra en estado inactivo, sino también una que está vinculada a otra unidad que se omite debido a una verificación de condición fallida (como ConditionPathExists =, ConditionPathIsSymbolicLink =, ... ver más abajo) será Se detuvo, debería estar funcionando. Por lo tanto, en muchos casos es mejor combinar BindsTo = con After =.

Un servicio (por ejemplo, bar.service) depende de otro servicio (por ejemplo, foo.service), como a continuación

archivo de servicio de bar:

[Unit] After=foo.service Requires=foo.service ...

Si se reinicia foo.service (ya sea manualmente o debido a un error), ¿cómo se puede reiniciar automáticamente el servicio de barra también?


Otra solución podría ser utilizar la opción ExecStartPost para reiniciar el servicio bar.si (si se ejecuta) cuando foo.service haya comenzado (re) nuevamente:

# foo.service [Service] ExecStartPost=/bin/systemctl try-restart bar.service Restart=on-failure RestartSec=30s

Las opciones adicionales Restart y RestartSec aseguran que foo.service se reiniciará automáticamente al bloquearse y, por lo tanto, también bar.service.

Una segunda extensión es agregar el mismo a bar.service y asegurarse de que bar.service comience después de foo.service:

# bar.service [Unit] After=foo.service [Service] Restart=on-failure RestartSec=30s

Esto debería iniciar ambos servicios automáticamente en caso de un bloqueo y el servicio bar.s se reiniciará cuando foo.service se reinicie (debido a un error o se active manualmente).


Puedes usar PartOf .

[Unit] After=foo.service Requires=foo.service PartOf=foo.service

Desde la página del manual de systemd.unit :

PartOf =

Configura dependencias similares a las requeridas =, pero limitadas 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 de un solo sentido: los cambios en esta unidad no afectan a las unidades enumeradas.