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