#!/bin/sh NODE=ejabberd HOST=localhost ERLANG_NODE=$NODE@$HOST # Define ejabberd environment ROOTDIR=@rootdir@ EJABBERD_CONFIG_PATH=$ROOTDIR/etc/ejabberd/ejabberd.cfg export EJABBERD_CONFIG_PATH EJABBERDCTL_CFG=$ROOTDIR/etc/ejabberd/ejabberdctl.cfg EJABBERD_INETRC=$ROOTDIR/etc/ejabberd/ejabberd.inetrc EJABBERD_EBIN=$ROOTDIR/var/lib/ejabberd/ebin EJABBERD_DB=$ROOTDIR/var/lib/ejabberd/db/$NODE EJABBERD_MSGS_PATH=$ROOTDIR/var/lib/ejabberd/priv/msgs EJABBERD_SO_PATH=$ROOTDIR/var/lib/ejabberd/priv/lib EJABBERD_LOG_PATH=$ROOTDIR/var/log/ejabberd/ejabberd.log export EJABBERD_LOG_PATH SASL_LOG_PATH=$ROOTDIR/var/log/ejabberd/sasl.log DATETIME=`date "+%Y%m%d-%H%M%S"` ERL_CRASH_DUMP=$ROOTDIR/var/log/ejabberd/erl_crash.dump.$DATETIME export ERL_CRASH_DUMP [ -d $EJABBERD_DB ] || mkdir -p $EJABBERD_DB [ -f $EJABBERDCTL_CFG ] && . $EJABBERDCTL_CFG HOME=$ROOTDIR/var/lib/ejabberd export HOME if [ $# -ne 0 ] ; then case $1 in --node) shift ; ERLANG_NODE=$1 ; shift ;; esac fi if [ "$ERLANG_NODE" = "${ERLANG_NODE%.*}" ] ; then SNAME="-kernel inetrc \""$EJABBERD_INETRC"\" -sname" else SNAME=-name fi # Compatibility in ZSH #setopt shwordsplit 2>/dev/null ERLANG_OPTS="$POLL $SMP $PROCESSES $ERL_MAX_ETS_TABLES" start () { erl \ $SNAME $ERLANG_NODE \ $ERLANG_OPTS \ -noinput -detached \ -pa $EJABBERD_EBIN \ -mnesia dir "\"$EJABBERD_DB\"" \ -s ejabberd \ -sasl sasl_error_logger \{file,\"$SASL_LOG_PATH\"\} } debug () { echo "--------------------------------------------------------------------" echo "" echo "IMPORTANT: we will attempt to attach an INTERACTIVE shell" echo "to an already running ejabberd node." echo "If an ERROR is printed, it means the connection was not succesfull." echo "You can interact with the ejabberd node if you know how to use it." echo "Please be extremely cautious with your actions," echo "and exit immediately if you are not completely sure." echo "" echo "To detach this shell from ejabberd, press:" echo " control+c, control+c" echo "" echo "--------------------------------------------------------------------" echo "Press any key to continue" read foo echo "" erl \ $SNAME debug \ -remsh $ERLANG_NODE } live () { echo "--------------------------------------------------------------------" echo "" echo "IMPORTANT: ejabberd is going to start in LIVE (interactive) mode." echo "All log messages will be shown in the command shell." echo "You can interact with the ejabberd node if you know how to use it." echo "Please be extremely cautious with your actions," echo "and exit immediately if you are not completely sure." echo "" echo "To exit this LIVE mode and stop ejabberd, press:" echo " q(). and press the Enter key" echo "" echo "--------------------------------------------------------------------" echo "Press any key to continue" read foo echo "" erl \ $SNAME $ERLANG_NODE \ $ERLANG_OPTS \ -pa $EJABBERD_EBIN \ -mnesia dir "\"$EJABBERD_DB\"" \ -s ejabberd } ctl () { erl \ $SNAME ejabberdctl \ -noinput \ -pa $EJABBERD_EBIN \ -s ejabberd_ctl -extra $ERLANG_NODE $@ case $? in 2) help_start;; 3) help_start;; esac } usage () { ctl exit } help_start () { echo "" echo "Commands to start an ejabberd node:" echo " start Start an ejabberd node in server mode" echo " debug Attach an interactive Erlang shell to a running ejabberd node" echo " live Start an ejabberd node in live (interactive) mode" echo "" } case $1 in start) start;; debug) debug;; live) live;; *) ctl $@;; esac