[erlang-questions] What's the proper/right way to run erlang in the background?

Michael Scofield bayinamine@REDACTED
Mon Oct 21 14:09:40 CEST 2013

Hi all! I'm new to erlang for a few month.

Recently I've developed a small pure erlang program, and it runs well in 
the shell. Now I want to run it in the background, as a daemon service 
process in the os (mine is Ubuntu 12.04 64bit with R16B). So I googled 
"run erlang without shell", and google gave me some advice:

1. Using escript. -This is what erlang official faq suggested ( 
2. erl -detached -s Module Function Args

I tried both. As to #1, my escript goes to

#!/usr/bin/env escript
main(_) ->
   my_supervisor:start_link(arg1, arg2).

I ran it using "nohup ./my-escript &", and it didn't run my code. =(

So I went to #2. I was acknowledged that "-s" can only pass 0 or 1 
argument, so I wrapped my supervisor using


start() ->
   my_supervisor:start_link(arg1, arg2).

and ran my code as "erl -detached -s run start". But this was also a 
dead end.

I guessed it's because the run:start/0 just returned and finished the 
shell(Is it?), so I added a line to the run:start/0:


start() ->
   my_supervisor:start_link(arg1, arg2),
*receive after infinity -> stop end.*

And executed "erl -detached -s run start", and everything goes fine! 
my_supervisor started to work without the shell!

Though the problem "solved", I'm very very confused.
1. Why the "magic line" solved my problem?
2. What exactly is the proper or right way to run an erlang application 
in the background as the command "nohup ... &" does?

Thanks in advance!

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20131021/966102c6/attachment.htm>

More information about the erlang-questions mailing list