Después = la opción no funciona en el archivo de servicio systemd

Después = la opción no funciona en el archivo de servicio systemd

Tengo dos scripts de shell llamados first.sh y second.sh. El contenido de first.sh y second.sh se detalla a continuación:

    >>first.sh
    #!/bin/bash
    while true
    do 
        echo The current time is $(date)
        sleep(1)
    done



    >>second.sh
    #!/bin/bash
    while true
    do 
        echo The current time from second script is $(date)
        sleep(1)
    done

De manera similar, el contenido de first.service es:

[Unit]
Description=first service
After=second.service
[Service]
ExecStart=/home/abanstola/first.sh

El contenido de second.service es:

[Unit]
Description=Second service
[Service]
ExecStart=/home/abanstola/second.sh

Tenga en cuenta lo que aparece After=second.serviceen el primer código de servicio. Según los documentos, el primer servicio no debería ejecutarse hasta que se inicie el segundo servicio. Pero incluso si desactivo o detengo el segundo servicio, el primer servicio se ejecuta sin ningún problema. ¿Qué estoy haciendo mal aquí?

Respuesta1

Has leído mal la documentación.Cita:

Si la unidad foo.servicecontiene la configuraciónBefore=bar.service y ambas unidades se están poniendo en marcha, bar.serviceel arranque de , se retrasa hasta que foo.servicehaya terminado de arrancar. After=es el inverso de Antes=

Destacado por mí. Esto sólo tiene efecto si ambas unidades están en marcha. Si desactivas uno de ellos, no tiene ningún efecto.

No está del todo claro lo que realmente quieres.

Probablemente mejores opciones sean:

Requires=

Similar a Wants=, pero declara una dependencia de requisitos más fuerte. Las dependencias de este tipo también se pueden configurar agregando un enlace simbólico a un .requires/directorio que acompaña al archivo de la unidad.

Si esta unidad se activa, las unidades enumeradas también se activarán. Si una de las otras unidades no se activa y After=se establece una dependencia de pedido en la unidad que falla, esta unidad no se iniciará. Además, con o sin especificar After=, esta unidad se detendrá si una de las otras unidades se detiene explícitamente.

PartOf=

Configura dependencias similares a Requires=, 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 se trata de una dependencia unidireccional: los cambios en esta unidad no afectan a las unidades enumeradas.

información relacionada