我有一个公司的Erlang应用程序,它是通过使用参数-setcookie调用escript来调用的。即使在命令行中指定了cookie,程序仍然会创建$HOME/.erlang.cookie。这就产生了一个问题,因为有时文件会获得错误的权限,这会导致程序无法运行。
我不知道为什么权限会发生变化,但如果程序在我不需要它的时候停止创建它,我就不会有问题。如果在命令行上提供了值,有没有办法使cookie文件不被创建?似乎不需要这个cookie文件,因为提供了参数。(如果文件确实需要创建,为什么只创建日期而不创建时间?
我有erts-10.3.1。
在@dolphin2017回答之后会有更多信息。该脚本实际上是由distillery工具提供的。我们调用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建议的所有内容,包括节点名、start和set_cookie,所以我不确定还需要什么。
现在发现这是来自酿酒厂的,我也会试着把它带到他们的各种沟通渠道上。但你可以在这里添加更多内容。
发布于 2019-08-01 11:34:19
以下是解决方案:
#!/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
...https://stackoverflow.com/questions/57259570
复制相似问题