¿Cómo gestiona systemd las dependencias entre los componentes y servicios del sistema?
systemd usa unidades para definir los componentes y servicios del sistema, y cada unidad tiene un archivo de configuración correspondiente, que define las propiedades y dependencias de la unidad.
systemd utiliza archivos de configuración para gestionar las dependencias entre servicios. Estos archivos de configuración generalmente se encuentran en /etc/systemd/system/
el directorio o /usr/lib/systemd/system/
directorio, dependiendo de la configuración del sistema.
A continuación se muestran algunas formas comunes en las que systemd gestiona las dependencias:
-
Requisitos y deseos: puede especificar que una unidad dependa de otras unidades utilizando las palabras clave
Requires
y en los archivos de configuración de la unidad . Indica una fuerte dependencia, es decir, la unidad dependiente debe iniciarse exitosamente antes de que se pueda iniciar la unidad actual. Indica una dependencia débil, es decir, no se requiere el inicio de la unidad dependiente, pero si la unidad dependiente está disponible, la unidad actual se iniciará primero.Wants
Requires
Wants
-
Antes y Después: Con las palabras clave
Before
yAfter
es posible definir el orden de inicio entre unidades.Before
indica que la unidad actual debe comenzar antes de la unidad especificada eAfter
indica que la unidad actual debe comenzar después de la unidad especificada. Esto garantiza que los servicios se inicien en un orden predefinido durante el inicio. -
PartOf y RequiresMountsFor:
PartOf
Palabras clave utilizadas para definir que una unidad es parte de otra unidad, si la unidad maestra arranca o se detiene, las unidades esclavas arrancan o se detienen en consecuencia.RequiresMountsFor
palabra clave utilizada para especificar el punto de montaje del sistema de archivos deseado para una unidad. -
OnFailure: utilizando
OnFailure
la palabra clave, puede definir una unidad para que se inicie solo cuando la unidad especificada no se inicia. Esto es útil para definir mecanismos de tolerancia a fallas y servicios de respaldo.
Con estas configuraciones de dependencia, systemd garantiza que los servicios se inicien y detengan en el orden correcto durante el inicio y la administración. La definición de dependencias también puede garantizar que un servicio se inicie solo cuando otros servicios de los que depende estén disponibles, mejorando así la confiabilidad y estabilidad del sistema.
Puede utilizar systemctl
los comandos para ver y administrar unidades y sus dependencias. Por ejemplo, systemctl status <unit>
se puede ver el estado y las dependencias de una unidad, systemctl enable <unit>
se puede habilitar una unidad, systemctl start <unit>
se puede iniciar una unidad, etc.
Tenga en cuenta que para administrar y configurar correctamente las dependencias, se recomienda leer atentamente la documentación de systemd y comprender el significado de las propiedades y palabras clave de cada unidad.
ejemplo
Aquí hay un ejemplo usando Requires
, Wants
y Before
:After
Supongamos que tenemos dos servicios: serviceA.service
y serviceB.service
. serviceA.service
Debe serviceB.service
iniciarse antes de comenzar y serviceB.service
no depende de otros servicios.
serviceA.service
El contenido del archivo de configuración es el siguiente:
[Unit]
Description=Service A
Requires=serviceB.service
After=serviceB.service
[Service]
ExecStart=/path/to/serviceA
serviceB.service
El contenido del archivo de configuración es el siguiente:
[Unit]
Description=Service B
[Service]
ExecStart=/path/to/serviceB
En este ejemplo, serviceA.service
en el archivo de configuración Requires=serviceB.service
indica serviceA.service
que depende de serviceB.service
y After=serviceB.service
especifica que serviceA.service
debe serviceB.service
iniciarse después. De esta manera, al iniciar serviceA.service
, systemd se iniciará automáticamente serviceB.service
y asegúrese de iniciar serviceB.service
antes serviceA.service
.
Tenga en cuenta que los ejemplos anteriores son solo para fines de demostración; los archivos de configuración reales pueden requerir más opciones y configuraciones, según las necesidades y la complejidad del servicio.
ejemplo oficial
Utilice la línea de comando para ver la configuración del servicio existente en el sistema operativoacpid.service
xzbd@ubuntu:~$ cat /usr/lib/systemd/system/acpid.service
[Unit]
Description=ACPI event daemon
Requires=acpid.socket
ConditionVirtualization=!container
Documentation=man:acpid(8)
[Service]
StandardInput=socket
EnvironmentFile=/etc/default/acpid
ExecStart=/usr/sbin/acpid $OPTIONS
[Install]
WantedBy=multi-user.target