erlang - 即使指定了 -setcookie,为什么 Erlang escript 仍会创建 .erlang.cookie
问题描述
我有一个公司 Erlang 应用程序,它通过使用参数 -setcookie 调用 escript 来调用。即使在命令行中指定了 cookie,程序最终仍会创建 $HOME/.erlang.cookie。这是一个问题,因为有时文件获得了错误的权限,这随后会阻止程序运行。
我不知道为什么权限会被更改,但如果程序在我不需要它时停止创建它,我不会有问题。如果在命令行上提供了值,有没有办法让它不创建 cookie 文件?由于提供了参数,因此似乎不需要此 cookie 文件。(如果确实需要创建文件,为什么要创建日期但没有时间?
我有 erts-10.3.1。
@dolphin2017 回答后的更多信息。该脚本实际上是由酿酒厂工具提供的。我们调用 nodetool ,它是用这些代码位编码的。
main(Args) ->
ok = start_epmd(),
%% Extract the args
{RestArgs, TargetNode} = process_args(Args, [], undefined),
和 process_args 如下所示:
process_args([], Acc, TargetNode) ->
{lists:reverse(Acc), TargetNode};
process_args(["-setcookie", Cookie | Rest], Acc, TargetNode) ->
erlang:set_cookie(node(), list_to_atom(Cookie)),
process_args(Rest, Acc, TargetNode);
process_args(["-name", TargetName | Rest], Acc, _) ->
ThisNode = append_node_suffix(TargetName, "_maint_"),
{ok, _} = net_kernel:start([ThisNode, longnames]),
process_args(Rest, Acc, nodename(TargetName));
process_args(["-sname", TargetName | Rest], Acc, _) ->
ThisNode = append_node_suffix(TargetName, "_maint_"),
{ok, _} = net_kernel:start([ThisNode, shortnames]),
process_args(Rest, Acc, nodename(TargetName));
process_args([Arg | Rest], Acc, Opts) ->
process_args(Rest, [Arg | Acc], Opts).
在我看来,这涵盖了 Dolphin2017 建议的所有内容,包括节点名、开始和 set_cookie,所以我不确定还需要什么。
现在发现这是来自酿酒厂的我也将尝试将其转移到他们的各种沟通渠道。但请随时在此处添加更多内容。
解决方案
这是解决方案:
#!/usr/bin/env escript
-mode(compile).
main(_) ->
SelfNode = ...,%atom, self node name
Cook = ...,% atom,cookie
net_kernel:start([SelfNode, longnames]),%
erlang:set_cookie(node(), Cook),
rpc:call(TargetNode,...),% do operation with target node
...
推荐阅读
- c# - 我的基本身份验证 Web api 未在任何浏览器中弹出身份验证
- c# - Wpf用户控件基础,无法创建实例
- mitmproxy - 当我尝试从 Java 代码中访问请求时,请求未通过 mitm 代理
- python - 我怎样才能简化代码?
- javascript - 如何在 Javascript 中序列化和反序列化 XMLDocument?
- java - 使用带有 JTA @Transactional 的自定义拦截器 (quarkus-narayana-jta)
- machine-learning - 最大Poseriori导数
- sql - 如何根据条件获得不同的行
- c# - 将不同的具体类型映射到接口集合
- reactjs - ReactJs 包