Quiero que Upstart haga dos cosas:
- deja de intentar reaparecer un proceso fallido tan rápido
- nunca te rindas tratando de reaparecer
En un mundo ideal, el advenedizo intentaría reiniciar un proceso muerto después de 1 segundo, luego duplicaría ese retraso en cada intento, hasta que llegara a una hora.
¿Es posible algo así?
never give up trying to respawn
permanece sin respuesta. ¿nadie?Respuestas:
Upstart Cookbook recomienda un retraso posterior a la detención ( http://upstart.ubuntu.com/cookbook/#delay-respawn-of-a-job ). Usa la
respawn
estrofa sin argumentos y continuará intentándolo para siempre:(Obtuve esto de esta pregunta de Ubuntu )
Para agregar la parte de retraso exponencial, intentaría trabajar con una variable de entorno en el script posterior a la parada, creo que algo así como:
** EDITAR **
Para aplicar el retraso solo al reaparecer, evitando el retraso en una parada real, use lo siguiente, que verifica si el objetivo actual es "parar" o no:
fuente
post-start
restablecerlo a 1.Como ya se mencionó, use
respawn
para activar la reaparición.Sin embargo, la cobertura de Upstart Cookbook
respawn-limit
dice que deberá especificarrespawn limit unlimited
para tener un comportamiento de reintento continuo.Por defecto, volverá a intentarlo siempre que el proceso no reaparezca más de 10 veces en 5 segundos.
Por lo tanto, sugeriría:
fuente
Terminé poniendo
start
un cronjob. Si el servicio se está ejecutando, no tiene ningún efecto. Si no se está ejecutando, inicia el servicio.fuente
He mejorado la respuesta de Roger. Por lo general, desea retroceder cuando hay un problema en el software subyacente que hace que se bloquee mucho en un corto período de tiempo, pero una vez que el sistema se ha recuperado, desea restablecer el tiempo de retroceso. En la versión de Roger, el servicio siempre duerme durante 60 segundos, incluso para bloqueos individuales y aislados después de 7 bloqueos.
fuente
Desea
respawn limit <times> <period>
, aunque esto no proporcionaría el comportamiento exponencial que está buscando, probablemente lo haría para la mayoría de los casos de uso. Puede intentar usar valores muy grandes paratimes
yperiod
aproximar lo que intenta lograr. Vea la sección de man 5 initrespawn limit
para referencia.fuente
respawn limit 10 3600
los 10 intentos, probablemente se usarían de inmediato, ya que de forma predeterminada no hay demora.Otros han respondido a la pregunta para las estrofas de reaparición y límite de reaparición, pero me gustaría agregar mi propia solución para el script posterior a la detención que controla el retraso entre el reinicio.
El mayor problema con la solución propuesta por Roger Dueck es que el retraso hace que 'reiniciar jobName' se cuelgue hasta que se complete la suspensión.
Mi adición verifica si hay un reinicio en progreso antes de determinar si se debe dormir o no.
fuente