Самый простой способ сообщить локальный узел erlang из команды оболочки - PullRequest
5 голосов
/ 04 февраля 2011

Я использую распределенную систему erlang с одним узлом на машину.

Поскольку DNS недоступен, я все запускаю их с одинаковым параметром -sname, например

erl -sname foo ...

AДемон операционной системы имеет функцию для выполнения команд оболочки (/bin/sh), когда происходит определенное событие (когда USB-флешка вставлена ​​в систему).

Я ищу простой способ вызовафункция на локальном узле erlang на этой машине с помощью этой команды оболочки (выполнение дальнейших действий после обнаружения и подключения USB-накопителя).

Я думал о вызове erl -sname bar из оболочки и запуске некоторого кода, который выглядиткак

[_,Host] = string:tokens(atom_to_list(node()), "@"),
The_node = list_to_atom("foo@" ++ Host),
spawn(The_node, My_fun),

Это путь?Или запускает совершенно новый перебор узла erlang (хотя делать это будет не часто)

Или лучше поговорить о сокете, открытом с помощью gen_tcp, или прочитать именованный канал.

Илидругие предложения?

Кстати, это работает в системе Unix.

1 Ответ

9 голосов
/ 04 февраля 2011

То, что вы хотите использовать, на самом деле erl_call , приложение, которое позволяет вам связываться с текущими распределенными узлами и выполнять произвольный код.связаться с распределенным узлом Erlang.Он построен на библиотеке erl_interface в качестве примера приложения.Его целью является использование сценария оболочки Unix для взаимодействия с распределенным узлом Erlang.

Вы можете либо дать ему команды, скрипт или просто код для оценки, и он это сделает.У вас есть больше деталей и фактический пример в его документации .

...