Limitar la tasa de reinicio del manual de servicio de systemd

Limitar la tasa de reinicio del manual de servicio de systemd

Tengo un sistema donde un servicio (nginx por ejemplo) a veces se reinicia excesivamente mediante 'systemd restart nginx' (como resultado de otros scripts, por ejemplo, para aplicar una nueva configuración o rotar registros).

Incluso cuando se reinicia un servicio "manualmente" de esta manera, systemd falla con el límite de tasa de reinicio. Además, por supuesto, no es útil reiniciar nginx 10 veces en un segundo determinado.

Entonces, ¿cómo limitar la tasa de reinicio manual de servicios? ¿Existe algo así como un reinicio-enfriamiento que también se aplicaría a las solicitudes de reinicio manual? Parece que todas las configuraciones habituales se aplican al reinicio automático mediante systemd.

Respuesta1

Puedes lograr esto con StartLimitIntervalSecy StartLimitBurst.

Desde la página de manual de la unidad systemd:

StartLimitIntervalSec=intervalo, StartLimitBurst=ráfaga

Configure la limitación de la tasa de inicio de la unidad. Las unidades que se inician más de los tiempos de ráfaga dentro de un intervalo de tiempo no pueden volver a iniciarse. Utilice StartLimitIntervalSec= para configurar el intervalo de verificación y StartLimitBurst= para configurar cuántos inicios por intervalo se permiten.

intervalo es un lapso de tiempo con la unidad predeterminada de segundos, pero se pueden especificar otras unidades, consulte systemd.time(5). El valor predeterminado es DefaultStartLimitIntervalSec= en el archivo de configuración del administrador y se puede configurar en 0 para deshabilitar cualquier tipo de limitación de velocidad. burst es un número y su valor predeterminado es DefaultStartLimitBurst= en el archivo de configuración del administrador.

Estas opciones de configuración son particularmente útiles junto con la configuración del servicio Restart= (ver systemd.service(5)); sin embargo, se aplican a todo tipo de inicios (incluido el manual), no solo a aquellos activados por la lógica Restart=.

Tenga en cuenta que las unidades que están configuradas para Restart= y que alcanzan el límite de inicio ya no se intentan reiniciar; sin embargo, aún se pueden reiniciar manualmente o desde un temporizador o enchufe en un momento posterior, una vez transcurrido el intervalo. A partir de ese momento, la lógica de reinicio se activa nuevamente. systemctl reset-failed hará que se vacíe el contador de velocidad de reinicio de un servicio, lo cual es útil si el administrador desea iniciar manualmente una unidad y el límite de inicio interfiere con eso. La limitación de velocidad se aplica después de ejecutar cualquier verificación de condición de la unidad y, por lo tanto, las activaciones de unidades con condiciones fallidas no cuentan para el límite de velocidad.

Respuesta2

¿Qué versión de sistema operativo estás usando? ¿Se instaló el paquete nginx utilizando el repositorio de la distribución de Linux o desde el código fuente?

Quizás las respuestas a estas preguntas puedan ayudar a determinar el posible camino necesario para solucionar el problema.

información relacionada