如何让Erlang服务器程序在后台运行,即实现守护进程的形态运行(★firecat推荐★)

我们知道当创建erlang module时,让其在后台运行的方法是:

终端输入命令:erl -detached -s hello start

注:-s hello start运行hello:start()函数,-detached是后台运行的意思.

但是当我们创建erlang application程序呢?如何实现后台运行?上述的方法可就不灵了。参考文章:Erlang/OTP 构建 Application

解决办法如下,我们采取JCL mode的方式:

参考文章:erlang 接入远程shell控制台(请重点学习作业JCL模式)


一、准备工作

采用分布式,erlang node。正式程序运行在Linux,通过Windows远程控制Linux。

Windows的ip地址是192.168.0.189,节点命名为firecat@192.168.0.189

Linux的ip地址是192.168.0.127,节点命名为helloba@192.168.0.127

centos7关闭防火墙:sudo systemctl stop firewalld.service
windows终端环境使用werl命令,Linux终端使用erl
ctrl+G进入JCL mode,q退出JCL


二、具体实施

linux终端:(IP addr-192.168.0.127)守护进程,隐藏erlang shell进程
先以detached运行一个节点
erl -name helloba@192.168.0.127 -setcookie abc -detached

检查这个erlang进程是否运行
ps -ef | grep beam

kill 命令用于终止进程
例如: kill -9 [PID]
-9 表示强迫进程立即停止

windows终端:(IP addr-192.168.0.189)
werl -name firecat@192.168.0.189 -setcookie abc
ctrl+G
--> r 'helloba@192.168.0.127'
--> c
然后输入终端命令application:start(tcp_server).

如此一来,便实现了erlang后台运行程序。
如果windows节点想切换回来也是用

Ctrl+G
--> r 'firecat@192.168.0.189'
--> c

退出使用

--> q


三、知识延伸

注意,-name的值必须是xxxx@ip的形式。其中xxxx是英文名,ip必须是数字和点的形式。如果是可以解析的有效域名应该也是可以的,但我试了用localhost会不能被正常连接。同时,这个ip也必须是客户端能访问到的有效ip,否则同样不能成功连接。


补充说明:
如果仅仅想在linux本机实现节点互联访问,也是可以的:
erl -name helloba@127.0.0.1 -setcookie abc -detached
erl -name test@127.0.0.1 -setcookie abc
ctrl+G
r 'helloba@127.0.0.1'

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值