运行mnesia节点,其业务逻辑作为操作系统守护程序

时间:2014-01-03 21:10:42

标签: erlang daemon rpc otp mnesia

我已按照此顺序开发了一个我在erlang shell中运行的应用程序。

$erl -name nodename@192.168.0.1 -mnesia dir '"/home/app/logic/database"' -setcookie  cookie

nodename@192.168.0.1> cd("/home/app/logic"). 

nodename@192.168.0.1> c(module1).

nodename@192.168.0.1> c(module2).

nodename@192.168.0.1> c(module3).

nodename@192.168.0.1> application:start(mnesia).

nodename@192.168.0.1>

现在我的问题是我想运行这个应用程序一个守护进程,这样当我退出 erlang shell时,它会继续运行并通过 rpc:call / 4与其他节点进行通信。 /强>

3 个答案:

答案 0 :(得分:1)

请查看erl命令选项,您应该看到类似-detached的内容,这有助于您这样做。 http://erlang.org/doc/man/erl.html

答案 1 :(得分:0)

这非常有效。

$erl -name nodename@192.168.0.1 -pa /home/app/logic -mnesia dir '"/home/app/logic/database"' -eval "application:start(mnesia)" -setcookie cookie -detached 

现在我在想是否可以安全地停止mnesia

$erl -name nodename@192.168.0.1 -pa /home/app/logic -mnesia dir '"/home/app/logic/database"' -eval "application:stop(mnesia)" -setcookie cookie -detached 

答案 2 :(得分:0)

管理作为守护进程运行的节点mnesia更容易使用对等erlang节点,即具有相同cookie的节点,即

$erl -name node_name@domain_name -setcookie cookie

然后通过rpc:call / 4将所有命令发送到mnesia节点,例如停止mnesia安全使用此

node_name@domain_name> rpc:call("nodename@192.168.0.1",application,stop,[mnesia]).

实际上这适用于作为守护进程运行的所有erlang节点是否运行任何应用程序的mnesia应用程序。