aboutsummaryrefslogtreecommitdiff
path: root/src/ejabberd_app.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ejabberd_app.erl')
-rw-r--r--src/ejabberd_app.erl33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/ejabberd_app.erl b/src/ejabberd_app.erl
index 80e8ca766..8c97394c2 100644
--- a/src/ejabberd_app.erl
+++ b/src/ejabberd_app.erl
@@ -40,6 +40,7 @@
start(normal, _Args) ->
ejabberd_loglevel:set(4),
+ write_pid_file(),
application:start(sasl),
randoms:start(),
db_init(),
@@ -81,6 +82,7 @@ prep_stop(State) ->
%% All the processes were killed when this function is called
stop(_State) ->
?INFO_MSG("ejabberd ~s is stopped in the node ~p", [?VERSION, node()]),
+ delete_pid_file(),
ejabberd_debug:stop(),
ok.
@@ -194,3 +196,34 @@ add_windows_nameservers() ->
IPTs = win32_dns:get_nameservers(),
?INFO_MSG("Adding machine's DNS IPs to Erlang system:~n~p", [IPTs]),
lists:foreach(fun(IPT) -> inet_db:add_ns(IPT) end, IPTs).
+
+
+%%%
+%%% PID file
+%%%
+
+write_pid_file() ->
+ case ejabberd:get_pid_file() of
+ false ->
+ ok;
+ PidFilename ->
+ write_pid_file(os:getpid(), PidFilename)
+ end.
+
+write_pid_file(Pid, PidFilename) ->
+ case file:open(PidFilename, [write]) of
+ {ok, Fd} ->
+ io:format(Fd, "~s~n", [Pid]),
+ file:close(Fd);
+ {error, Reason} ->
+ ?ERROR_MSG("Cannot write PID file ~s~nReason: ~p", [PidFilename, Reason]),
+ throw({cannot_write_pid_file, PidFilename, Reason})
+ end.
+
+delete_pid_file() ->
+ case ejabberd:get_pid_file() of
+ false ->
+ ok;
+ PidFilename ->
+ file:delete(PidFilename)
+ end.