diff options
Diffstat (limited to 'src/ejabberd_app.erl')
-rw-r--r-- | src/ejabberd_app.erl | 33 |
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. |