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

发布于 2024-10-16 10:34:37 字数 651 浏览 5 评论 0原文

我正在运行一个分布式 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

jJeQQOZ5 2024-10-23 10:34:37

你想要使用的实际上是erl_call,一个可以让你联系当前分布式的应用程序节点并运行任意代码。

erl_call 使得启动分布式 Erlang 节点和/或与分布式 Erlang 节点通信成为可能。它是基于 erl_interface 库构建的示例应用程序。其目的是使用 Unix shell 脚本与分布式 Erlang 节点进行交互。

您可以给它命令、脚本或几乎只是代码来评估,它就会执行此操作。您可以在其文档中了解更多详细信息和实际示例。

What you want to use is actually erl_call, an application that lets you contact currently distributed nodes and run arbitrary code.

erl_call makes it possible to start and/or communicate with a distributed Erlang node. It is built upon the erl_interface library as an example application. Its purpose is to use an Unix shell script to interact with a distributed Erlang node.

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文