GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué la mayoría de los ejemplos de Systemd contienen Wantedby=multi-user.target?

He leído lo que es multi-user.target y la documentación de systemd, que establece que multi-user.target es un objetivo especial. Además, muchos de los ejemplos de systemd contienen esa línea.

  1. ¿Por qué tantos servicios de ejemplo contienen esa línea?
  2. ¿Qué pasaría si no contuvieran WantedBy=multi-user.target?
  3. ¿Podría darme un ejemplo de cuándo sería realmente recomendable no incluir esa línea en una definición de archivo de servicio?
  4. Del mismo modo, ¿cuándo es una buena idea mantener esa línea?

Respuesta aceptada:

1.) multi-user.target es básicamente el equivalente más cercano al clásico SysVinit runlevel 3 que systemd posee. Cuando un systemd el sistema se inicia, systemd está tratando de hacer que el estado del sistema coincida con el estado especificado por default.target – que suele ser un alias para graphical.target o multi-user.target .

multi-user.target normalmente define un estado del sistema en el que se inician todos los servicios de red y el sistema aceptará inicios de sesión, pero no se inicia una GUI local. Este es el estado de sistema predeterminado típico para los sistemas de servidor, que pueden ser sistemas sin periféricos montados en rack en una sala de servidores remota.

graphical.target es otro posible alias para default.target . Normalmente se define como un superconjunto de multi-user.target :incluye todo el multi-user.target hace, además de la activación de un inicio de sesión GUI local. Algo así como el nivel de ejecución 5 en SysVinit clásico.

La línea WantedBy=multi-user.target en un servicio es esencialmente lo mismo que especificar "este servicio debe comenzar en los niveles de ejecución 3, 4 y 5" en los sistemas SysVinit:le dice a systemd que este servicio debe iniciarse como parte del inicio normal del sistema, ya sea que una GUI local esté activa o no.

Sin embargo, WantedBy es independiente del estado habilitado/deshabilitado:así que, en otro sentido, es una especie de "preajuste":determina bajo qué condiciones puede ocurrir el inicio automático, pero solo cuando el servicio está habilitado en primer lugar.

2.) si omite el WantedBy=multi-user.target línea y ningún otro servicio habilitado incluye un Requires=your.service o Wants=your.service en su definición de servicio, su servicio no se iniciará automáticamente.

systemd funciona en dependencias y en el momento del arranque, si nada Requires o Wants su servicio, no se iniciará incluso si el servicio está habilitado.

Claro, podrías editar tu default.target para agregar o eliminar Requires o Wants líneas para cualquier servicio que desee iniciar en el momento del arranque, pero para que pueda colocar un nuevo archivo de servicio en el sistema y hacer que funcione de forma predeterminada (lo que facilita mucho las cosas para los administradores de paquetes de software), systemd tiene el WantedBy y RequiredBy palabras clave que se pueden usar para insertar Wants y Requires -escriba las dependencias (respectivamente) desde "el otro extremo".

Relacionado:¿Ubuntu – systemd “activación de socket” vs xinetd?

3.) Debe omitir la línea si no desea que el servicio se inicie automáticamente en el momento del arranque, o este servicio es parte de una cadena de dependencias que ha definido explícitamente.

Por ejemplo, podría estar refactorizando la aplicación de servidor A y, por alguna razón u otra, decidir dividir alguna funcionalidad opcional en un servicio B separado, para permitir al usuario la opción de no instalarla si no es necesaria. Luego podría hacer que el servicio B sea un service-B.rpm separado y defina B.service con WantedBy=A.service para hacer systemd inicie el servicio B automáticamente cada vez que se inicie el servicio A, pero solo cuando service-B.rpm está realmente instalado.

Tenga en cuenta que un Wants o WantedBy solo dice que el sistema debe iniciar un servicio siempre que también se inicie otro servicio u objetivo, pero no especifica nada sobre el orden de inicio/apagado. Si necesita que el servicio B ya se esté ejecutando cuando se inicie el servicio A, deberá agregar Before=A.service en el B.service para especificar explícitamente la dependencia del orden de inicio.

4.) Siempre que hagas desea que el servicio tenga la capacidad de iniciarse automáticamente en el momento del arranque, y no hay otras dependencias ya definidas.


Linux
  1. ¿Por qué Systemd detiene el servicio inmediatamente después de iniciarlo?

  2. ¿Systemd lee /etc/pm/…?

  3. Ejemplos de comandos de servicio en Linux

  4. Ejemplos del comando chkconfig en Linux

  5. Cómo detener el servicio systemd

Comandos Systemctl para administrar el servicio Systemd

Uso de las funciones de systemd para proteger los servicios

Administrar cgroups con systemd

Ejemplos de comandos systemd-analyze en Linux

activación de socket systemd frente a xinetd

Dependencias de Systemd y orden de arranque