当我在localhost上测试我的erlang应用程序时,我有一个启动服务器的脚本,如下所示:
#!/bin/sh
PWD="$(pwd)"
NAME="$(basename $PWD)"
erl -pa "$PWD/ebin" deps/*/ebin -boot start_sasl \
-name devnode@127.0.0.1 \
-s reloader \
-s $NAME \
-setcookie some_random_cookie \
+K true \
+P 65536
这会提示打开Erlang shell,然后我会输入类似的内容:
application:start(myapp)
这适用于开发目的,但如何在生产中部署它?到目前为止,我能想到的唯一方法是启动一个屏幕进程并从中分离。我不认为应该是这样的。我正在使用钢筋,如果这有帮助的话。
答案 0 :(得分:6)
听起来您想要使用自定义启动脚本。引导脚本告诉erlang系统要启动什么。在您正在使用的脚本中,您将使用以下命令设置启动脚本:
-boot start_sasl
http://www.erlang.org/doc/system_principles/system_principles.html,查找“用户定义的引导脚本”部分
更简单的选择可能是将您的应用转换为使用钢筋:https://github.com/basho/rebar。然后,您就可以执行以下操作:
./rebar compile generate
这将为应用程序创建一个版本,然后允许您:
./rel/<app_name>/bin/<app_name>
相同的原则,只是为了方便使用而包装好。
答案 1 :(得分:5)
添加参数-detached
。 documentation很好地总结了这一点:
启动与系统控制台分离的Erlang运行时系统。用于运行守护进程和后台进程。
完成此操作后,您可以使用-s
参数启动应用程序。假设$NAME
= myapp
,init将尝试调用myapp:start/0
(如果需要,您可以自定义此项)。该函数应以调用application:start(myapp)
结束。
如果你可以获得所有这些拼图,你应该有一个工作脚本。
答案 2 :(得分:-8)
好吧,你可以尝试将它挂钩到Apache (see here),或者一个简单的解决方案,不像屏幕会话那样使用nohup
。如果您实际在生产服务器上实现此操作,并且不想采用Apache路由,则可以考虑使用init script。