Sin embargo, no estoy familiarizado con este servicio, si mi tarea fuera resolver este problema, y una lectura muy breve de la página del manual no ofrecía una simple perilla para ajustar este comportamiento, haría lo siguiente:
Extienda el script de inicio del servicio existente o, si eso es engorroso, inserte un nuevo script de inicio en la cadena (que a su vez inicia el script de inicio original). En lugar de iniciar el servicio de inmediato, la nueva secuencia de comandos de inicio debe verificar si el último inicio se produjo recientemente. Esto se puede hacer comprobando un archivo de señalización creado por el inicio anterior. Si el archivo no existe, la secuencia de comandos puede continuar y tocar el archivo e iniciar el servicio. Si el archivo existe, el script debe verificar si el archivo es lo suficientemente antiguo. Si no tiene la edad suficiente, debe esperar (dormir) en un bucle hasta que el archivo tenga la edad suficiente.
Algo como esto podría funcionar (espera al menos 1 minuto entre reinicios):
#!/bin/bash
SIGNALDIR=/tmp
SIGNALFILE=service.started
while /bin/true; do
found=`find "${SIGNALDIR}" -maxdepth 1 -name "${SIGNALFILE}" -mmin -1 | wc -l`
[ "${found}" -eq 0 ] && break
echo "Waiting"
sleep 10
done
touch "${SIGNALDIR}/${SIGNALFILE}"
original service start...
Debería limitar la velocidad de sus reinicios en el
./finish
archivo para ese servicio, que se ejecuta con una terminación anormal. El./finish
script recibirá el código de retorno desde./run
y desde allí, usted puede determinar qué hacer, etc. En ese caso, debe hacer que su./finish
script grite en voz alta sobre los fallos y envíe notificaciones y salte a la llama ...fuente
Realmente no soy un fanático de la gestión de procesos basada en init (y runit es básicamente un sustituto de init). Como está descubriendo, el reinicio simple de los procesos fallidos tan pronto como mueren no es una estrategia particularmente buena. He usado init para reiniciar monit, pero eso es todo lo posible. (potencialmente asesino OOM podría matar a monit).
Por lo tanto, te animo a buscar un reemplazo en lugar de arreglar las cosas.
Monit es bastante viejo, pero hace bien el trabajo, y no estoy al tanto de que haya aparecido algo mejor. Tiene la buena característica de no necesitar mallocar más memoria después del inicio, por lo que supera a todo lo que está escrito en un lenguaje de script. Lo último que desea es que su monitor de proceso muera porque no puede obtener memoria.
fuente