加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

从具有复杂参数的unix shell运行erlang

发布时间:2020-12-15 19:03:05 所属栏目:安全 来源:网络整理
导读:我需要从unix shell运行复杂的erlang模块函数 rpc:call('node@example.com',mnesia,dirty_first,[mytable]) 我该怎么做? UPD: 我做test.escript chmod x test.escript #!/usr/lib64/erlang/bin/escript%%! -name 'test@example.com'main(_Args) - R = rpc:
我需要从unix shell运行复杂的erlang模块函数
rpc:call('node@example.com',mnesia,dirty_first,[mytable])

我该怎么做?

UPD:

我做test.escript

chmod x test.escript

#!/usr/lib64/erlang/bin/escript
%%! -name 'test@example.com'
main(_Args) ->
    R = rpc:call('node@example.com',[mytable]),io:format("~p~n",[R]).

并收到{badrpc,nodedown}

但是跑的时候

erl -name test@example.com
1> rpc:call('node@example.com',[mytable]).
{my,data}.

我的意思是它有效,但如何使escript工作真正的?

我认为 escript可能值得一试.

编辑:
一些例子.

首先是所有示例:以某种方式在某处启动远程节点.

dannib@duval:~:> erl -sname bar
            (bar@duval)1> erlang:get_cookie().
            'KNKKCFPYMJUPIOLYPOAA'

Escript

1:使用内容创建名为hello.escript的文件

#!/usr/bin/env escript
            %%! -sname foo@duval -setcookie KNKKCFPYMJUPIOLYPOAA

            main(_String) ->
                Node = 'bar@duval',Mod = 'erlang',Fun = 'node',Args = [],R = rpc:call(Node,Mod,Fun,Args),io:format("Hello there ~p~n",[R]).

请注意%%! -sname foo @bar标识主机上的节点(而不是创建nonode @nohost),允许设置相同的cookie %%! -sname foo @ duvel -setcookie KNKKCFPYMJUPIOLYPOAA作为目标主机解决了获取{badrpc,nodedown}的问题.请注意,相同的语句适用于以下示例(erl_call和-eval),其中设置了节点名称和cookie.

2:设置执行位并运行

$chmod +x hello.escript
            $./hello.escript 
            Hello there bar@duval

Erl_call

1:跑

$erl_call -c 'KNKKCFPYMJUPIOLYPOAA' -a 'erlang node' -n bar@duval
            bar@duval

EVAL

1:跑

$erl -sname foo -setcookie 'KNKKCFPYMJUPIOLYPOAA' 
            -eval 'io:format("Hello there ~p~n",[rpc:call(bar@duval,erlang,node,[])])'
            ... Eshell V5.7.4  (abort with ^G)
            (foo@duval)1> Hello there bar@duval

这会创建一个shell,在这种情况下可能不是你想要的.

我可能会提到,如果两个节点都在同一主机上并使用相同的cookie默认值,则不必像示例中那样显式设置foo和bar的cookie值.

在做完这些例子并再次阅读你的问题之后,我认为我提出的可行建议将是你最好的选择,erl_call.我对“问题”中的“复杂”这个词感到沮丧,其中imho escripts以易于阅读的方式允许更多“复杂”的设置. escript示例中的变量_String保存脚本的参数,允许您通过shell访问输入并在EVM中执行复杂的erlang操作.但是如果你已经在其他应用程序中拥有逻辑并且只需要对erlang节点进行这种简单调用,那么erl_call可能会更直接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读