diff options
author | Badlop <badlop@process-one.net> | 2009-08-24 21:21:04 +0000 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2009-08-24 21:21:04 +0000 |
commit | 1b81a2e3d6944cb55edcade1119de1cb1edbe589 (patch) | |
tree | f01b721dda8600ff62adfbfab73f0110ff59235b | |
parent | Document that the admin can install ejabberd.init script (EJAB-755) (diff) |
Write PID file, path is configurable in ejabberdctl.cfg (EJAB-1023)
SVN Revision: 2526
-rw-r--r-- | doc/guide.html | 2 | ||||
-rw-r--r-- | doc/guide.tex | 2 | ||||
-rw-r--r-- | src/ejabberd.erl | 12 | ||||
-rw-r--r-- | src/ejabberd_app.erl | 33 | ||||
-rw-r--r-- | src/ejabberdctl.cfg.example | 12 | ||||
-rw-r--r-- | src/ejabberdctl.template | 1 |
6 files changed, 62 insertions, 0 deletions
diff --git a/doc/guide.html b/doc/guide.html index 350964fac..ef6d24757 100644 --- a/doc/guide.html +++ b/doc/guide.html @@ -3378,6 +3378,8 @@ all the environment variables and command line parameters.</P><P>The environment Path to the directory with binary system libraries. </DD><DT CLASS="dt-description"><B><TT>EJABBERD_DOC_PATH</TT></B></DT><DD CLASS="dd-description"> Path to the directory with ejabberd documentation. +</DD><DT CLASS="dt-description"><B><TT>EJABBERD_PID_PATH</TT></B></DT><DD CLASS="dd-description"> + Path to the PID file that ejabberd can create when started. </DD><DT CLASS="dt-description"><B><TT>HOME</TT></B></DT><DD CLASS="dd-description"> Path to the directory that is considered <TT>ejabberd</TT>’s home. This path is used to read the file <TT>.erlang.cookie</TT>. diff --git a/doc/guide.tex b/doc/guide.tex index 924ad2478..8d4f257a4 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -4327,6 +4327,8 @@ The environment variables: Path to the directory with binary system libraries. \titem{EJABBERD\_DOC\_PATH} Path to the directory with ejabberd documentation. + \titem{EJABBERD\_PID\_PATH} + Path to the PID file that ejabberd can create when started. \titem{HOME} Path to the directory that is considered \ejabberd{}'s home. This path is used to read the file \term{.erlang.cookie}. diff --git a/src/ejabberd.erl b/src/ejabberd.erl index 0c7c56a2a..228614b93 100644 --- a/src/ejabberd.erl +++ b/src/ejabberd.erl @@ -28,6 +28,7 @@ -author('alexey@process-one.net'). -export([start/0, stop/0, + get_pid_file/0, get_so_path/0, get_bin_path/0]). start() -> @@ -63,3 +64,14 @@ get_bin_path() -> Path -> Path end. + +%% @spec () -> false | string() +get_pid_file() -> + case os:getenv("EJABBERD_PID_PATH") of + false -> + false; + "" -> + false; + Path -> + Path + end. 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. diff --git a/src/ejabberdctl.cfg.example b/src/ejabberdctl.cfg.example index 0c8d0c5a6..1ba413fe2 100644 --- a/src/ejabberdctl.cfg.example +++ b/src/ejabberdctl.cfg.example @@ -111,5 +111,17 @@ #ERLANG_NODE=ejabberd #. +#' EJABBERD_PID_PATH: ejabberd PID file +# +# Indicate the full path to the ejabberd Process identifier (PID) file. +# If this variable is defined, ejabberd writes the PID file when starts, +# and deletes it when stops. +# Remember to create the directory and grant write permission to ejabberd. +# +# Default: don't write PID file +# +#EJABBERD_PID_PATH=/var/run/ejabberd/ejabberd.pid + +#. #' # vim: foldmarker=#',#. foldmethod=marker: diff --git a/src/ejabberdctl.template b/src/ejabberdctl.template index f6a30bb09..48a56ba5b 100644 --- a/src/ejabberdctl.template +++ b/src/ejabberdctl.template @@ -118,6 +118,7 @@ export EJABBERD_LOG_PATH export EJABBERD_SO_PATH export EJABBERD_BIN_PATH export EJABBERD_DOC_PATH +export EJABBERD_PID_PATH export ERL_CRASH_DUMP export ERL_INETRC export ERL_MAX_PORTS |