Использование эрланг сердца

Как использовать сердце, чтобы поддерживать приложение в действии?

Допустим, у меня есть приложение X, будет ли оно отслеживаться, если я просто позвоню примерно так:

erl -boot X -heart -env HEART_BEAT_TIMEOUT 30 -detached

?

2 ответа

Решение

Да, это автоматически запустит сердечный процесс, который контролирует ваш узел. Смотрите документацию сердца.

Обновление: Да, Асимптота верна. Вам также нужно HEART_COMMAND переменная окружения, чтобы указать сердцу, что делать при перезапуске узла.

http://www.erlang.org/doc/man/heart.html

This modules contains the interface to the heart process. heart
sends periodic heartbeats to an external port program, which is
also named `heart`. The purpose of the heart port program is to
check that the Erlang runtime system it is supervising is still
running. If the port program has not received any heartbeats within
`HEART_BEAT_TIMEOUT` seconds (default is 60 seconds), the system
can be rebooted. Also, if the system is equipped with a hardware
watchdog timer and is running Solaris, the watchdog can be used to
supervise the entire system.

<snip>

If the system should be rebooted because of missing heart-beats, or
a terminated Erlang runtime system, the environment variable
HEART_COMMAND has to be set before the system is started. If this
variable is not set, a warning text will be printed but the system
will not reboot.

Прямо сейчас у меня есть Makefile с утверждением, что будет работать erl -heart ... для меня. Когда я выполняю это, вот список процессов:

ubuntu    3814  3579  3814  3579  0 22:03 pts/0    00:00:00           make webstart
ubuntu    3829  3814  3814  3579 25 22:03 pts/0    00:00:01             /usr/local/lib/erlang/erts-5.8.3/bin/beam.smp -K true -A 5
ubuntu    3848  3829  3848  3848  0 22:03 ?        00:00:00               heart -pid 3829

Когда я убиваю PID 3829в оболочке Erlang появится следующий вывод:

heart: Wed May 18 22:04:09 2011: Erlang has closed.
heart: Wed May 18 22:04:09 2011: Would reboot. Terminating.
make: *** [webstart] Terminated

Ясно, что мне нужно установить HEART_COMMAND для какого-то оператора перезагрузки, и тогда сердце будет работать так, как требуется. AFAIK, учитывая описание в документации, сердце не предназначено просто перезапустить Erlang VM при сбое; это звучит как то, что должен сделать для тебя руководитель Эрланга, но я могу ошибаться.

(Конечно, вы можете получить HEART_COMMAND, чтобы перезапустить программу Erlang).

Другие вопросы по тегам