从shell命令通知本地erlang节点的最简单方法

Pee*_*ger 5 erlang distributed sh

我正在运行一个分布式的erlang系统,每台机器有一个节点.

由于DNS不可用,我都用相同的-sname参数启动它们,例如

erl -sname foo ...
Run Code Online (Sandbox Code Playgroud)

操作系统守护程序具有在/bin/sh发生特定事件时(当USB棒被拖入系统时)执行shell()命令的功能.

我正在寻找一种简单的方法来使用这个shell命令在本机的本地erlang节点上调用一个函数(在检测到并安装了USB记忆棒后采取进一步的操作).

我正在考虑erl -sname bar从shell 调用并运行一些看起来像的代码

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

这是要走的路吗?或者是开始一个全新的erlang节点过度杀戮(虽然不会经常这样做)

或者更好地谈论gen_tcp打开的套接字,或者读取命名管道.

还是其他任何建议?

BTW这是在Unix系统上运行的.

I G*_*ICE 9

您想要使用的实际上是erl_call,这是一个允许您联系当前分布式节点并运行任意代码的应用程序.

erl_call可以启动和/或与分布式Erlang节点通信.它构建在erl_interface库之上,作为示例应用程序.其目的是使用Unix shell脚本与分布式Erlang节点进行交互.

你可以给它命令,一个escript或几乎只是代码来评估,它会做.您的文档中有更多详细信息和实际示例.