2011-03-11 84 views
4

我有erlang應用程序:* .app文件和一些* .erl文件。我編譯所有這些。在終端我開始埃爾和那裏application:start(my_application).,一切都好,但如果我關閉終端應用程序。我如何運行沒有終端的應用程序?運行不帶終端的erlang應用程序依賴於

謝謝。

回答

9

您可能想要使用-noshell選項來erl。語法是

erl -noshell -s Module Function Arguments 

所以你的情況,這可能是

erl -noshell -s application start my_application 

這應該允許您(例如,如果你是在Unix/Linux)來啓動應用程序作爲後臺進程,並留下它正在運行。

一個有用的變化是也調用init模塊的stop/0函數,以便Erlang環境在完成運行功能時停止。如果您想運行一個簡單的一次性函數並將輸出傳遞給其他進程,這很方便。

因此,例如,對管more你可以做

erl -noshell -s mymodule myfunction -s init stop | more 

最後,您可能還可以使用escript命令來運行你的Erlang代碼的腳本,而不是編譯代碼,如果它是有道理的爲你的情況。

希望有所幫助。

3

處理這種情況的正確方法是構建一個包含您的應用程序的發行版,並將該系統作爲所謂的嵌入式應用程序運行。 這個版本將會完全獨立(它會保存erts和所有的libs,kernel,std,mnesia等)。 開始時,新進程不會連接到shell進程。 這將是OS進程,因此您可以使用管道附加到它。所有腳本都包含在OTP中。 以下是一些信息:http://www.erlang.org/doc/design_principles/release_structure.html 這看起來可能很複雜,但像螺紋鋼這樣的工具會爲您做所有事情。

相關問題