`
cwqcwk1
  • 浏览: 86774 次
文章分类
社区版块
存档分类
最新评论

erlang 接入远程shell控制台

 
阅读更多
erlang shell是用户与 erlang 运行时系统交互的界面程序。事实上,erlang VM的运行不依赖任何shell,只要在启动的时候添加参数detached就可以脱离终端。
-detached
Starts the Erlang runtime system detached from the system console. Useful for running daemons and backgrounds processes. Implies -noinput.
实际上,detached等效于noshell 加上 noinput。
# erl -detached -emu_args
Executing: /home/erl/lib/erlang/erts-5.10.3/bin/beam /home/erl/lib/erlang/erts-5.10.3/bin/beam -- -root /home/erl/lib/erlang -progname erl -- -home /root -- -noshell -noinput
另外,需要注意的是,windows不直接支持detached,而是以服务的形式在后台运行,见erlsrv

现在讨论erlang 接入远程shell控制台的几种方式。

作业(JCL)模式

在 Erlangshell 中按下^G键,就可以看到作业控制模式(JCLmode)的菜单。在菜单中,有个选项能让我们连接到一个远程 shell。
先以detached运行一个节点1:
# erl -name1@127.0.0.1-setcookie 123456 -detached
检查这个erlang进程是否运行
# ps -ef | grep beam
root 20672 1 0 01:32 ? 00:00:00 /home/erl/lib/erlang/erts-5.10.3/bin/beam -- -root /home/erl/lib/erlang -progname erl -- -home /root -- -name1@127.0.0.1-setcookie 123456 -noshell -noinput
启动另外一个节点2,并接入到节点1
# erl -name2@127.0.0.1-setcookie 123456
Erlang R16B02 (erts-5.10.3) [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.3 (abort with ^G)
(2@127.0.0.1)1>
User switch command
--> h
c [nn] - connect to job
i [nn] - interrupt job
k [nn] - kill job
j - list all jobs
s [shell] - start local shell
r [node [shell]] - start remote shell
q - quit erlang
? | h - this message
--> r '1@127.0.0.1'
--> j
1 {shell,start,[init]}
2* {'1@127.0.0.1',shell,start,[]}
--> c 2
Eshell V5.10.3 (abort with ^G)
(1@127.0.0.1)1>
注意了,windows下要使用werl

连接到远程 shell 后,所有的终端输入解析操作都由本地 shell 完成,不过求值的工作是在远程完成的。远程求值的结果输出全部被转发给本地 shell。
要退出 shell, 按^G回到 JCL 模式。终端输入解析操作是在本地进行的, 因此通过^Gq 的方式退出 shell 是安全的。
Eshell V5.10.3 (abort with ^G)
(1@127.0.0.1)1>
User switch command
--> q


Remsh 模式

Remsh和 JCL 模式很类似,但是调用方式不同的机制。使用这种机制,JCL 模式的所有操作步骤都可以被绕过,只需像下面这样启动 shell,对于长名字:

-remshNode
Starts Erlang with a remote shell connected to Node.

以下方式启动节点2,将直接接入节点1控制台:
# erl -name 2@127.0.0.1 -setcookie 123456 -remsh 1@127.0.0.1
Erlang R16B02 (erts-5.10.3) [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.3 (abort with ^G)
(1@127.0.0.1)1> node().
'1@127.0.0.1'
这种方式和JCL很相像,本地也会启动一个erlang节点用于接入远程shell


SSH 模式

erlang自带了SSH的功能,我们可以很方便的开启SSH服务,对外提供远程 shell服务。 SSH的使用需要开启crypto,如果erlang显示以下错误,可以参考这篇文章
1> crypto:start().
** exception error: undefined function crypto:start/0
要使用该功能,通常需要先准备好具有远程访问 SSH 权限的 key,不过这里为了快速测试,可以这样做:
节点1启动ssh服务:
Eshell V5.10.3 (abort with ^G)
(1@127.0.0.1)1> ssh:start().
ok
(1@127.0.0.1)2> ssh:daemon(8888, [{password, "12345"}]).
{ok,<0.57.0>}
本地不需要启动erlang节点,直接使用ssh连接即可,输入以上设置的密码,就可以接入节点1的shell控制台。
# ssh -p 8888 1@127.0.0.1
The authenticity of host '[127.0.0.1]:8888 ([127.0.0.1]:8888)' can't be established.
RSA key fingerprint is ad:03:b4:6b:df:51:97:23:dc:47:cb:75:85:15:44:89.
Are you sure you want to continue connecting (yes/no)?yes
Warning: Permanently added '[127.0.0.1]:8888' (RSA) to the list of known hosts.
1@127.0.0.1's password:
Eshell V5.10.3 (abort with ^G)
(1@127.0.0.1)1>
这种方式,erlang shell所有操作都是在远程节点完成的。


管道(pipe)模式

在使用管道(pipe)连接到一个Erlang节点时,和SSH一样不需要启动本地erlang节点。这种方法很少用,每次输出时都调用fsync,如果输出过多时,会有很大的性能损失。

具体做法为:用run_erl启动 erlang,相当于把 erlang 进程包在一个管道中:
# mkdir /tmp/erl_log
# cd /home/erl/bin
# ./run_erl -daemon /tmp/erl_pipe /tmp/erl_log "erl -name 1@127.0.0.1 -setcookie 123456"
其中,daemon 表示以后台进程运行,/tmp/erl_pipe是管道文件的名称,/tmp/erl_log指定了日志保存文件夹
然后使用 to_erl 程序来连接节点:
# ./to_erl /tmp/erl_pipe
Attaching to /tmp/erl_pipe (^D to exit)
(1@127.0.0.1)1> node().
'1@127.0.0.1'

参考:http://blog.csdn.net/mycwq/article/details/43850735
https://s3.amazonaws.com/erlang-in-anger/text.v1.0.3.pdf
分享到:
评论

相关推荐

    使用erlang连接ES的客户端

    在IT领域,Erlang是一种面向并发的、函数式编程语言,常用于构建高可用性和分布式系统,如电信、银行和互联网服务等。Elasticsearch(简称ES)则是一款流行的开源全文搜索引擎,广泛应用于大数据分析和实时搜索。...

    erlang 连接学习例子

    Erlang是一种面向并发的、函数式编程语言,由瑞典电信设备制造商Ericsson开发,用于构建高可用性、分布式和实时系统。在这个“erlang 连接学习例子”中,我们有两个核心文件:`server.erl` 和 `client.erl`,它们...

    erldocker, 面向Erlang的Docker 远程API客户端.zip

    erldocker, 面向Erlang的Docker 远程API客户端 erldockererldocker 是一个Erlang应用程序,它实现了 Docker 远程 API v1.4.public 模块包括:docker,docker_container 和 docker_image 。设置要开始

    基于Erlang的Shell集成游戏服务器设计源码

    该项目是一款基于Erlang语言开发的Shell集成游戏服务器设计源码,包含87个文件,其中61个Erlang源文件、18个头文件以及其他类型的文件,如2个Markdown文件、2个应用程序描述文件、1个Git忽略文件、1个Shell脚本文件...

    Erlang应用程序接口 - Topic at CN Erlounge III

    我在Erlounge III大会上的讲演PPT。 相关的视频在这里: http://groups.google.com/group/erlang-china/browse_thread/thread/2154c39503795edc

    Erlang应用程序接口(视频,1/4)

    这是第一卷。 在2008 CN Erlounge III的“Erlang应用程序接口”讲演的视频。PPT等其它资料在这里: http://blog.csdn.net/aimingoo/archive/2009/01/14/3777765.aspx 有关信息参见: ...

    erlang中文基础教程

    Erlang 编程语言是一种功能强大且灵活的编程语言,它提供了一个交互式的 shell 环境,允许用户在其中编写和运行代码。 Erlang Shell 是一个命令行交互环境,类似于 UNIX 和 LINUX 系统的命令行模式。 1. Erlang ...

    erlang 中文基础教程

    ### Erlang 中文基础教程:理解Erlang Shell与模块函数 #### 1. Erlang Shell:编程者的交互式环境 Erlang Shell是Erlang编程语言提供的一种交互式编程环境,允许开发者直接在命令行中编写、执行Erlang代码并观察...

    erlang -c语言程序接口.pdf

    ### Erlang与C语言程序接口详解 #### 一、引言 在软件开发领域,不同编程语言之间的交互是一项重要的技术。Erlang作为一种专为构建高并发、容错性强的应用程序而设计的语言,在与其他语言(如C语言)的集成方面具有...

    erlang_版本24.3.4.4

    - **Erlang shell(REPL)**:交互式环境,用于测试和调试代码。 - **Erlang的数据类型**:包括原子(atom)、整数、浮点数、字符串、列表、元组、位串等。 - **Pattern Matching**:Erlang的匹配操作符`=`允许在...

    erlang25.0 windows版本

    4. **验证**:安装完成后,打开命令行窗口并输入`erl`,如果Erlang成功安装,你应该能看到Erlang的shell(REPL)启动。 Erlang 25.0版本可能包含以下改进和新特性: 1. **性能优化**:新版本通常会对语言性能进行...

    erlang资源

    5. **REPL(Read-Eval-Print Loop)**:Erlang shell的使用,它是学习和测试Erlang代码的重要工具。 6. **实际应用案例**:可能包含Erlang在实时系统、网络通信、数据库或Web服务等领域的应用示例。 这两本书结合...

    erlang编程 Introducing Erlang

    **Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,...

    Erlang_win64_24.1.rar

    安装完成后,用户可以通过命令行检查Erlang是否成功安装,可以输入`erl`启动Erlang shell,如果出现Erlang的欢迎信息,说明安装成功。同时,Erlang的版本信息可以通过在shell中输入`erlang:system_info(version)`来...

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    当呼叫到达速率超过系统的处理能力时,部分呼叫将会被阻塞,无法接入。Erlang C公式用于计算在特定的呼叫到达率、呼叫持续时间和系统容量下,会发生多大比例的呼叫阻塞。 提供的"爱尔兰B计算器.exe"和"ErlangC计算...

    Erlang语言连接工具ErlPort.zip

    ErlPort 是一个Erlang 库,用来帮助连接 Erlang 与其他编程语言。目前支持的是 Python 和 Ruby。Erlang 库使用 Erlang 端口协议 来简化Erlang 语言和 Erlang 外部术语格式 的连接,设置良好的数据类型映射。   ...

    Erlang 环境 opt_win64_21.1版本

    - 多语言支持:RabbitMQ提供多种客户端库,支持Java、Python、Ruby、JavaScript等语言,方便不同语言的应用程序接入。 总的来说,otp_win64_21.1版本的Erlang环境是运行RabbitMQ等基于Erlang的应用的基础,它提供了...

    python-erlang-interface:Python的Erlang接口

    派尔 PyErl是Python的Erlang接口。 这可以帮助您集成用Python和Erlang编写的程序。依赖该模块需要以下其他模块和库: Erlang / OTP R12或更高版本在Debian中: apt-get install erlang-dev安装python setup.py build...

    Erlang_x64_20.1

    4. 验证安装:通过命令行输入`erl`,如果成功启动了Erlang shell,说明安装完成。 对于RabbitMQ的配置,还需要: 1. 下载RabbitMQ服务器的Windows发行版。 2. 安装RabbitMQ,同样配置环境变量,比如`RABBITMQ_...

    Erlang Windows 64位 安装包

    3. 验证安装:安装完成后,可以在命令行输入"erl"来启动Erlang shell,如果出现Erlang的欢迎信息,说明安装成功。 Erlang与RabbitMQ的关系:RabbitMQ是一个开源的消息代理和队列服务器,广泛用于处理异步任务和实现...

Global site tag (gtag.js) - Google Analytics