Agregar retraso entre la detención y el inicio de un proceso en systemd

10

Tengo un problema realmente extraño con systemd. Cuando emito un systemctl restart, comenzará el nuevo proceso antes de que finalice el anterior.

Esto se puede ver en el registro, donde el mensaje final de apagado ("registro de cierre") se registra después del mensaje de inicio ("registro de apertura").

¿Hay alguna forma de agregar un retraso entre la parada y el inicio del proceso?

Šimon Tóth
fuente
Nada te impide corrersystemctl stop myservice && sleep 3 && systemctl start myservice
don_crissti
¿Por qué es eso extraño? Es una característica de diseño que te deja en paz para solucionar problemas del mundo real. Inyecte la suspensión en el inicio de su Unidad o use una condición ExecPre para asegurarse de que la instancia anterior desaparezca por completo.
Florian Heigl

Respuestas:

13

En sus archivos de servicio systemd, puede configurar la opción RestartSec para agregar un retraso para reiniciar. Ver ejemplo a continuación:

[Service]
Restart=always
RestartSec=30

Mira este enlace para más ejemplos.

mmohammad
fuente
1
afaik RestartSecsolo se aplica a los servicios configurados con la Restart=directiva y no se tiene en cuenta al hacer unsystemctl restart someservice
don_crissti
1

RestartSec parece usarse solo si ese servicio en particular es el que se reinicia a través del comando systemctl restart.

Por ejemplo, tengo dos servicios, A y B.

[Unit]
Requires=network-online.target
[Service]
ExecStart=A-stuff
Restart=always

y

[Unit]
Requires=A.service
After=A.service
[Service]
ExecStart=B-stuff
Restart=always
RestartSec=30

Si realiza un reinicio de systemctl B, funciona como se esperaba ... pero si realiza un reinicio de systemctl A, ambos servicios se detienen y se reinician de inmediato, sin demora.

Aparentemente, Systemd solo está utilizando los valores de configuración para el servicio que especifique e ignorándolos para cualquier dependencia.

Esto no es tan raro como parece. Si B habla con un servidor remoto, el inicio y la detención rápida pueden fallar debido a que el extremo remoto rechaza al cliente. Pero reiniciar A directamente sucederá cada vez que A se actualice sin cambiar a B.

Probablemente pueda evitar esto agregando también el retraso a A, pero no debe NECESITAR hacerlo, ya que interrumpe el aislamiento de objetos al informar a A sobre B cuando no es una dependencia.

Quijadhal aterrador
fuente