использование эрланг сердца - PullRequest
5 голосов
/ 19 мая 2011

Как следует использовать heart, чтобы поддерживать приложение в рабочем состоянии?

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

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

?

Ответы [ 2 ]

4 голосов
/ 19 мая 2011

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

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

2 голосов
/ 19 мая 2011

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).

...