Linux 无图形化桌面 ** exception error: undefined function observer:start/0

解决:** exception error: undefined function observer:start/0 问题

1、当在无图形化桌面的Linux(这里是在 Win10 应用商店版 Ubuntu 18.04 LTS 子系统下进行测试)终端下运行:observer:start().

    会提示 observer:start/0 函数未定义,而在win10 powershell下则可以正常运行。

如图会提示函数没有定义:** exception error: undefined function observer:start/0

2、解决办法,是通过rpc来实现间接访问 。因为在win10上可以启动查看器,所以可以通过借助win10 上的查看器来连接Linux 系统上的erlang节点。

具体步骤如下:

1.Win10上启动erlang节点并设置cookie为:abc 

PS C:\Users\SummerGao> erl -name rpc@127.0.0.1 -setcookie abc
Eshell V9.1  (abort with ^G)
(rpc@127.0.0.1)1>  observer:start().
ok
(rpc@127.0.0.1)2>

2.Linux系统上启动erlang节点后 设置一下当前节点的cookie(需要与win10上设置的cookie保持一致)

root@DESKTOP-VDFG4H0:/home# erl -name summergao@127.0.0.1 -setcookie abc
Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [kernel-poll:false]
Eshell V9.2  (abort with ^G)
(summergao@127.0.0.1)1>

如果忘记或刚开始没有设置cookie,则可以通过 erlang:set_cookie(node(), abc). 函数设置一下(可以在已经启动的节点上用这种方法设置cookie)

(summergao@127.0.0.1)1> erlang:set_cookie(node(), abc).                  
true

3.下面开始连接

如下说明连接成功:

参数说明:

(1) 用-name参数启动Erlang。我们在同一台机器上运行两个节点时可以使用“短”(short)名称(通过-sname标识体现)。但如果它们属于不同的网络,我们就要使用-name。当两台机器位于同一个子网时我们也可以使用-sname。而且如果没有DNS服务, -sname就是唯一可行的方式。
(2) 确保两个节点拥有相同的cookie。这正是启动两个节点时都使用命令行参数-setcookie abc的原因。
(3) 确保相关节点的完全限定主机名(fully qualified hostname)可以被DNS解析。

(4) 确保两个系统拥有相同版本的代码和相同版本的Erlang。如果不这么做,就可能会得到严重而离奇的错误。避免问题的最简单的方法是在所有地方都运行相同版本的Erlang。不同版本的Erlang可以一起运行,但是无法保证能正常工作,所以最好事先检查一下。

参考:《Erlang程序设计(第二版)》第十四章 分布式编程

参考:https://blog.csdn.net/libaineu2004/article/details/78166077

转载于:https://my.oschina.net/summergao/blog/3076414

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值