2014-02-24 77 views
3

我試圖從erlang vm中單獨啓動epmd,以便對連接處理進行監視。啓動沒有epmd的erlang VM

這工作正常,除了在epmd之前啓動虛擬機的情況。

有沒有辦法讓erlang vm在沒有啓動epmd的情況下自己啓動?

回答

1

可能有幫助的問題/解答:

所以內嵌這些問題/答案,我建議讓二郎VM服務依賴於EPMD(其應該是另一項服務)。另外,如果您運行epmd作爲您的第一個運行服務之一,應該可以在每次erlang之前啓動它。但如何做到這一點實際上取決於您的操作系統和部署實施細節。

此外,一個不太優雅的解決方案是更改您的init腳本,因此它會等待epmd啓動,但是需要手動啓動。您的里程可能會有所不同,和一個非常幼稚的做法(但有用爲例)會是這樣的:

while [ true ]; do 
     pid=`pidof epmd`; 
     if [ "$pid" == "" ]; then 
     sleep 1; # Wait a bit more 
     else 
     break; 
     fi 
    done 
    # Continue initialization 

注意,代碼應該考慮嘗試的最大數量,也只的pidof適用於Linux等不知道我喜歡這個解決方案,但可以完成這項工作。

作爲不太優雅的解決方案,您可以用您自己的二進制代碼來替換erlang將運行的epmd,它可以執行您需要的任何操作(如僞造epmd start或運行您自己的代碼,如上面的代碼中所示)。

希望它有幫助!

1

從Erlang/OTP 19.0開始,有a -start_epmd command line option可以設置爲true(默認值)或false

如果您在命令行上通過-start_epmd false並且epmd正在運行,那麼Erlang節點將照常啓動。如果EPMD沒有運行,Erlang的節點無法啓動此消息:

$ erl -start_epmd false -sname foo 
Protocol 'inet_tcp': register/listen error: econnrefused 

如果二郎節點未啓動作爲分佈式節點(即,不經過-name-sname),它既不啓動也不嘗試無論-start_epmd設置如何,連接到epmd。