Недавно я столкнулся с ошибкой, из-за которой умерло все приложение Erlang, в результате чего появилось сообщение журнала, которое выглядело так:
=INFO REPORT==== 11-Jun-2010::11:07:25 ===
application: myapp
exited: shutdown
type: temporary
Я понятия не имею, что вызвало это отключение, но настоящая проблема, с которой я столкнулся, это то, что он не перезапустился сам. Вместо этого, теперь пустая Erlang VM просто сидела и ничего не делала.
Теперь, исходя из проведенного мною исследования, похоже, что есть и другие «типы запуска», которые вы можете подать в приложение: «переходный» и «постоянный».
Если я запускаю Supervisor в приложении, я могу сказать ему сделать определенный процесс временным или постоянным, и он автоматически перезапустит его для меня. Однако, согласно документации, если я создаю приложение временное или постоянное, оно не перезапускает его, когда умирает, а скорее убивает все другие приложения.
Что я действительно хочу сделать, так это как-то сказать виртуальной машине Erlang, что конкретное приложение должно всегда работать, и если оно выходит из строя, перезапустить его. Можно ли это сделать?
(Я не говорю о реализации супервизора поверх моего приложения, потому что тогда уловка 22: что делать, если мой процесс супервизора падает? Я ищу какой-то API или параметр, который я могу использовать, чтобы иметь Erlang монитор и перезапустите мое приложение для меня.)
Спасибо!