从 shell 命令通知本地 erlang 节点的最简单方法
我正在运行一个分布式 erlang 系统,每台机器一个节点。
由于 DNS 不可用,我都使用相同的 -sname
参数启动它们,例如,
erl -sname foo ...
操作系统守护程序具有在以下情况下执行 shell (/bin/sh
) 命令的功能:发生特定事件(当 USB 记忆棒插入系统时)。
我正在寻找一种简单的方法来使用此 shell 命令调用本机本地 erlang 节点上的函数(在检测到并安装 USB 记忆棒后采取进一步操作)。
我正在考虑从 shell 调用 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 系统上运行的。
I'm running a distributed erlang system with one node per machine.
Since DNS is not available I all start them with the same -sname
param e.g.
erl -sname foo ...
A operating-system daemon has the feature to execute shell (/bin/sh
) commands when a certain event occurs (when a USB stick is pugged into the system).
I'm looking for a simple way to call a function on the erlang node local on this machine with this shell command (taking further action after the USB stick was detected and mounted).
I was thinking of calling erl -sname bar
from the shell and run some code that looks like
[_,Host] = string:tokens(atom_to_list(node()), "@"),
The_node = list_to_atom("foo@" ++ Host),
spawn(The_node, My_fun),
Is this the way to go? Or is starting a whole new erlang node overkill (won't be doing it often though)
Or is it better to talk a socket opened by gen_tcp, or read a named pipe.
Or any other suggestions?
BTW this is running on a Unix system.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你想要使用的实际上是erl_call,一个可以让你联系当前分布式的应用程序节点并运行任意代码。
您可以给它命令、脚本或几乎只是代码来评估,它就会执行此操作。您可以在其文档中了解更多详细信息和实际示例。
What you want to use is actually erl_call, an application that lets you contact currently distributed nodes and run arbitrary code.
You can either give it commands, an escript or pretty much just code to evaluate and it will do it. You have more details and actual example in its documentation.