From fca16f446c4794f2ba41307aa2cff1f393dd592e Mon Sep 17 00:00:00 2001 From: Badlop Date: Mon, 5 Apr 2021 20:04:09 +0200 Subject: [PATCH] Experimental support CTL_ON_CREATE and CTL_ON_START environment variables --- ecs/bin/ejabberdctl | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/ecs/bin/ejabberdctl b/ecs/bin/ejabberdctl index 33a1dda..6c169ac 100755 --- a/ecs/bin/ejabberdctl +++ b/ecs/bin/ejabberdctl @@ -253,6 +253,28 @@ check_start() cp "$HOME_DIR"/lib/ejabberd-*/priv/sql/* "$HOME_DIR/database/" } +post_waiter_fork() +{ + (FIRST_RUN=$FIRST_RUN "$0" post_waiter)& +} + +post_waiter_waiting() +{ + $0 started + [ -n "$FIRST_RUN" ] && [ -n "$CTL_ON_CREATE" ] && (post_waiter_loop $CTL_ON_CREATE) + [ -n "$CTL_ON_START" ] && post_waiter_loop $CTL_ON_START +} + +post_waiter_loop() +{ + LIST=$@ + HEAD=${LIST%% ; *} + TAIL=${LIST#* ; } + echo ":> ejabberdctl $HEAD" + $0 $HEAD + [ "$HEAD" = "$TAIL" ] || post_waiter_loop $TAIL +} + # allow sync calls wait_status() { @@ -275,6 +297,7 @@ wait_status() } # ensure we can change current directory to SPOOL_DIR +[ -d "$SPOOL_DIR" ] || FIRST_RUN=true [ -d "$SPOOL_DIR" ] || run_cmd mkdir -p "$SPOOL_DIR" cd "$SPOOL_DIR" || { echo "ERROR: can not access directory $SPOOL_DIR" @@ -289,6 +312,7 @@ case $1 in ;; foreground) check_start + post_waiter_fork exec_erl "$ERLANG_NODE" $EJABBERD_OPTS -noinput ;; live) @@ -328,6 +352,9 @@ case $1 in stopped) wait_status 3 30 2 && stop_epmd # wait 30x2s before timeout ;; + post_waiter) + post_waiter_waiting + ;; *) run_erl "$(uid ctl)" -hidden -noinput -boot start_clean \ -s ejabberd_ctl -extra "$ERLANG_NODE" $NO_TIMEOUT "$@"