Dependencias de Systemd y orden de arranque

20

Necesito especificar un orden de arranque para que se inicien los procesos. Tengo 389 Directory Server y Samba ejecutándose en Fedora 18. ¿Cómo puedo hacer que los servicios de red arranquen, luego 389 DS y luego Samba? ¿Hay una GUI para administrar esto en Fedora?

He habilitado Samba para empezar systemctl enable smb.service. También he habilitado 389 DS con systemctl enable dirsrv.target.

Dylan Klomparens
fuente
Systemd no requiere orden entre los servicios, la idea es comenzar todo en paralelo y entregar las conexiones a los servidores a medida que estén disponibles. La configuración dada por la instalación predeterminada debería estar bien. ¿Por qué crees que tienes que definir un pedido? ¿Algo no funciona?
vonbrand
También debo señalar, ya que esto ha vuelto a aparecer, que realmente no debería estar ejecutando servicios de archivo / impresión en su controlador de dominio.
Michael Hampton
@vonbrand Tuve este problema, donde mi servidor DHCP necesitaba una bofetada para estar activo (porque su configuración estaba almacenada en un directorio LDAP). Si no fuera así, el servidor DHCP no aparecería.
mat

Respuestas:

25

Use systemctl edit smb.servicepara actualizar las dependencias.

After=dirsrv.target - Asegurará que smb.service se inicie después de dirsrv.target.

Para robustez, (lo que valdrá la pena si está jugando con estas cosas) también puede incluir algunos de los siguientes:

Requires=dirsrv.target- Active dirsrv.target cuando se active smb.service. Hará que smb.service falle si dirsrv.target falla.

Wants=dirsrv.target- Active dirsrv.target cuando se active smb.service. No hará que smb.service falle si dirsrv.target falla.

BindsTo=dirsrv.target - Si dirsrv.target está desactivado, desactive smb.service.

Fuente: http://www.freedesktop.org/software/systemd/man/systemd.unit.html

systemd-uiproporciona una GUI para systemd. Da una buena vista del estado de systemd pero aún tendrá que usar un editor de texto para modificar los archivos de la unidad.

Guy Gangemi
fuente
En un caso, A requiere B , ¿qué dirá "B" ha "fallado" para que A no se inicie? ¿El programa de B devuelve un valor distinto de cero?
John Wang
2
Votado en contra porque esto aconseja una mala práctica. No edite las /usr/lib/systemdversiones de los archivos de la unidad a menos que sea un mantenedor de la distribución o disfrute que sus archivos se sobrescriban en cada actualización del paquete. Copie el archivo de la unidad /etc/systemdy luego edítelo, o use un archivo desplegable (consulte systemd.unit (5) para más detalles). Aún más fácil, ¡solo usa el systemctl edit smb.serviceque hace la magia del archivo desplegable automáticamente!
Jeremy Visser
3
Gracias por editar la respuesta! Resuelve las preocupaciones, y me he convertido en un voto a favor. :-)
Jeremy Visser
10

Haz dos cosas:

  1. Edite el /lib/systemd/system/smb.servicearchivo de la unidad, para especificar la dependencia. La [unit]sección contiene una After=línea que especifica qué servicios / objetivos deben alcanzarse antes de este.

    After=syslog.target network.target nmb.service winbind.service
    

    Cámbielo a:

    After=dirsrv.target syslog.target network.target nmb.service winbind.service
    
  2. Informe esta dependencia a Fedora como un error , para que pueda incorporarse en futuras versiones.

Michael Hampton
fuente
Eso no parece funcionar. Samba todavía está arrancando antes de 389.
Dylan Klomparens
3
después de modificar los unitarchivos, por lo general debería ejecutarsystemctl daemon-reload
scottyseus
2

quizás necesite cambiar o incluir una línea con la Requiresdirectiva en la [Unit] sección del /usr/lib/systemd/system/smb.servicearchivo.

Requires=dirsrv.target

y

After=dirsrv.target
cturiel
fuente
Bueno, he votado por esta respuesta, sin embargo, personalmente iría con wants = dirsrv.target en lugar de Requiere =. (ver systemd.unit (5) para wants =)
galaxy
2

Hay dos alternativas para modificar el archivo de servicio en /usr/lib/systemd/system(consulte el Ejemplo 2. Anulación de la configuración del proveedor ):

  1. Copie el archivo /etc/systemd/systemy realice las modificaciones en la copia. Este archivo anulará completamente el archivo en /usr/lib.

  2. Crea el archivo /etc/systemd/system/smb.service.d/local.conf. El contenido del archivo debería ser similar al siguiente ejemplo. Esto anula selectivamente las opciones "Requiere" y "Después" en el archivo de servicio proporcionado por el proveedor.

Cada uno de estos (incluida la modificación del archivo /usr/lib) ofrece ventajas y desventajas. La mejor opción puede depender del servicio y la naturaleza de las modificaciones.

Si bien puede funcionar, no es suficiente agregar solo la opción "Después" (ver Opciones de la sección [Unidad] ). "Después" controla el orden, pero no las dependencias. Si dirsrv.targetno se inicia de otra manera, al especificar un pedido no se iniciará. El uso de la opción "Requiere" o "Deseos" obligará dirsrv.targeta iniciarse.

[Unit]
Requires=dirsrv.target
After=dirsrv.target

NB: No sé si este enfoque estaba disponible cuando esta pregunta se hizo originalmente.

ojo
fuente