
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.service
en 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.service
contiene la configuraciónBefore=bar.service
y ambas unidades se están poniendo en marcha,bar.service
el arranque de , se retrasa hasta quefoo.service
haya 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:
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 especificarAfter=
, esta unidad se detendrá si una de las otras unidades se detiene explícitamente.
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.