erlang无图形界面的linux下如何使用observer:start(). --- ★firecat推荐★
问:
如果我的erlang app部署在linux机器上,且linux机器上只能通过命令行的方式访问,没有安装图形界面相关的库。如果直接在Linux终端输入命令observer:start().,会报错:
Eshell V8.3 (abort with ^G)
1> observer:start().
{error,{{load_driver,"No driver found"},
[{wxe_server,start,1,[{file,"wxe_server.erl"},{line,65}]},
{wx,new,1,[{file,"wx.erl"},{line,115}]},
{observer_wx,init,1,[{file,"observer_wx.erl"},{line,104}]},
{wx_object,init_it,6,[{file,"wx_object.erl"},{line,355}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,247}]}]}}
=ERROR REPORT==== 3-Oct-2017::13:44:22 ===
ERROR: Could not find 'wxe_driver.so' in: /usr/local/lib/erlang/lib/wx-1.8/priv
1> observer:start().
{error,{{load_driver,"No driver found"},
[{wxe_server,start,1,[{file,"wxe_server.erl"},{line,65}]},
{wx,new,1,[{file,"wx.erl"},{line,115}]},
{observer_wx,init,1,[{file,"observer_wx.erl"},{line,104}]},
{wx_object,init_it,6,[{file,"wx_object.erl"},{line,355}]},
{proc_lib,init_p_do_apply,3,
[{file,"proc_lib.erl"},{line,247}]}]}}
=ERROR REPORT==== 3-Oct-2017::13:44:22 ===
ERROR: Could not find 'wxe_driver.so' in: /usr/local/lib/erlang/lib/wx-1.8/priv
这个时候我能否从windows的机器上通过rpc运行observer:start(). 然后在windows的机器上通过界面来查看那个linux环境上的erlang app运行情况?
答:No problem!请注意,从erl OTP17版本之后的appmon:start()命令就不支持了,统一改成observer:start().
解决办法如下,我们采取JCL mode的方式:
参考文章:erlang 接入远程shell控制台(请重点学习作业JCL模式)
一、准备工作
采用分布式,erlang node。正式程序运行在Linux,通过Windows远程控制Linux。
Windows的ip地址是192.168.0.189,节点命名为[email protected]
Linux的ip地址是192.168.0.127,节点命名为[email protected]
centos7关闭防火墙:sudo systemctl stop firewalld.service
windows终端环境使用werl命令,Linux终端使用erl
ctrl+G进入JCL mode,q退出JCL
二、具体实施
linux终端:(IP addr-192.168.0.127)
先以detached运行一个节点
erl -name [email protected] -setcookie abc
windows终端:(IP addr-192.168.0.189)
werl -name [email protected] -setcookie abc
然后输入终端命令observer:start().弹出对话框,点击菜单Nodes->Connect Node,输入Linux的节点名称。
如此一来,便实现了跨平台远程监控。
三、如何查看ETS和Mnesia数据库?
点击Table Viewer即可,默认显示的是ETS。然后在主菜单View里面有选择,可以切换ETS和Mnesia Tables。
四、另外,本地电脑也可以远程查看具有公网ip的服务器
在Windows终端输入,其中172.16.6.144是本地的局域网ip地址:
werl -name [email protected] -setcookie emqttdsecretcookie
werl -name [email protected] -setcookie emqttdsecretcookie
或者直接使用127.0.0.1地址更好,以免本机IP是路由器分配的,经常变。
werl -name [email protected] -setcookie emqttdsecretcookie
然后shell输入终端命令observer:start().弹出对话框,点击菜单Nodes->Connect Node,输入Linux的节点名称[email protected]。其中10.21.170.184是公网ip地址。
然后shell输入终端命令observer:start().弹出对话框,点击菜单Nodes->Connect Node,输入Linux的节点名称[email protected]。其中10.21.170.184是公网ip地址。