Recientemente me encontré con un error en el que murió toda una aplicación de Erlang, dando un mensaje de registro que se veía así:reiniciar automáticamente las aplicaciones Erlang
=INFO REPORT==== 11-Jun-2010::11:07:25 ===
application: myapp
exited: shutdown
type: temporary
no tengo idea de lo que dio origen a este apagado, pero el problema real que tener es que no se reinició a sí mismo. En cambio, la máquina virtual Erlang ahora vacía solo se sentó allí sin hacer nada.
Ahora, de la investigación que he hecho, parece que hay otros "tipos de inicio" que puede dar a una aplicación: "transitoria" y "permanente".
Si comienzo a un Supervisor dentro de una aplicación, te puedo decir que hacer un proceso particular, transitoria o permanente, y se reiniciará automáticamente para mí. Sin embargo, de acuerdo con la documentación, si realizo una aplicación transitoria o permanente, no se reinicia cuando muere, sino que mata a todas las demás aplicaciones también.
Lo que realmente quiero hacer es decirle a la máquina virtual de Erlang que una aplicación en particular siempre se debe ejecutar, y si se apaga, reiníciela. ¿Es posible hacer esto?
(No estoy hablando de implementar un supervisor sobre mi aplicación, porque entonces es una trampa 22: ¿qué ocurre si el proceso de mi supervisor se bloquea? Estoy buscando algún tipo de API o configuración que pueda usar para haga que Erlang monitoree y reinicie mi aplicación para mí.)
¡Gracias!
Genial, muchas gracias por su respuesta. Ahora veo que la razón por la que murió fue porque se alcanzó el límite máximo de reinicio. No obstante, no necesariamente quiero deshabilitar eso, ya que si realmente entra en un ciclo de reinicio, es posible que tengamos que reiniciar toda la aplicación. ¿Hay alguna manera de que reinicie la aplicación si se alcanza el límite de AllowedRestarts/MaxSeconds, en lugar de cerrar la aplicación? – Nick
En el caso que describa, agregará un supervisor a su supervisor. El comportamiento que utiliza OTP es que cuando se envía una señal de salida al proceso que realiza la llamada de inicio a la aplicación (es decir,cuando el supervisor de nivel superior fallece) asume que la aplicación no ha podido corregir el error y que apagará la aplicación y posiblemente el nodo dependiendo de la configuración. Supongo que el punto es que las aplicaciones no deberían bloquearse, y si lo hacen, el error es lo suficientemente grave como para que solo se resuelva con un reinicio del nodo. – Lukas
El enlace es 404 - ¿Alguien tiene una actualización ...? – jisaacstone