一种以standalone方式启动erlang应用的方法(守护进程)

来源:互联网 发布:淘宝每日好店怎么报名 编辑:程序博客网 时间:2024/04/29 17:22

http://cryolite.iteye.com/blog/383927

erlang默认运行时是带有终端的,在开发过程中可以很方便的检查程序的bug,但在开发完成后,应该以后台的方式运行服务。

-noshell   (该参数关闭终端,但依然不会后台运行,有输出时会直接打印到当前屏幕

-noinput  禁止终端下的输入

-hidden 隐藏运行

-detached 后台方式运行

其实最好用的就是-detached,如果将此参数加入启动脚本,程序会立即进入后台运行,你可以通过进程号将其调入到前台,在加入此参数运行服务器后,查看当前正在运行的程序,你会发现这个参数自动被分解成了 -noshell 和 -noinput, 所以,在加入-detached后,就不需要再加这两个参数了

-------

就像普通java应用一样启动一个erlang虚拟机,程序在虚拟机上运行,没有交互界面。 

一个办法是启动时带 -detached参数,这样erlang虚拟机就进入了所谓的detached模式,在detached模式中,erlang静悄悄的在背后运行,没有常见的那个交互终端界面。 

例子:以detached模式启动一个my_app应用 

Shell代码  收藏代码
  1. erl -detached -name foo@192.168.1.103 -setcookie abc -s my_app  

my_app就像普通的daemon应用一样在背后运行了 

但是当要控制detached模式启动的erlang虚拟机时怎么办,比如退出应用,或者查看erlang应用状态等。 

连接detached模式的erlang节点的方法就我所知有两种: 

1。 通过远程shell JCL登录,在Programming Erlang的6.7.3节介绍了这个,简单的说就是ctrl+g后的那个shell界面。具体方法是: 
i) 启动一个erlang节点: 
Shell代码  收藏代码
  1. erl -name bar@192.168.1.103 -setcookie abc  

ii) ctrl+g进入shell JCL,然后远程连接detached模式的erlang: 
Erlang shell代码  收藏代码
  1. --> r 'foo@192.168.1.103'  
  2. --> c  
  3. Eshell V5.7.1  (abort with ^G)  
  4. (foo@192.168.1.103)1>   

就可以控制detached模式的erlang了 

2。使用erl的-remsh参数 
Shell代码  收藏代码
  1. erl -name bar@192.168.1.103 -remsh foo@192.168.1.103 -setcookie abc  

但这样attach上后不知道怎么恢复到原来的detached模式 


个人觉得shell JCL的方式比较好,如果有多个detached模式的Erlang节点(不管是不是远程的),都可以用一个Erlang shell进行控制,有点screen的感觉了,呵呵。 

detached模式比较符合我们常用的erlang启动方法。在mryufeng的另一种实用的接入erlang控制台的方法中提到的方法也蛮好的说,但不知道可不可以远程接入。 

嗯,先记下 

注: 
带-detached参数的启动可能等效于同时带-noshell和-noinput参数的启动,用 
Linux shell代码  收藏代码
  1. ps -ef|grep beam  

查看-detached启动的erlang进程时就会发现包含了-noshell -noinput这俩参数。 


参考资料 
1. Detached mode 
2.erl 
3. How to start an erlang applications from the command line non-interactively? 

原创粉丝点击