#!/bin/sh # /bin/sh on Solaris is not a POSIX compatible shell, but /usr/bin/ksh is. if [ `uname -s` = 'SunOS' -a "${POSIX_SHELL}" != "true" ]; then POSIX_SHELL="true" export POSIX_SHELL # To support 'whoami' add /usr/ucb to path PATH=/usr/ucb:$PATH export PATH exec /usr/bin/ksh $0 "$@" fi unset POSIX_SHELL # clear it so if we invoke other scripts, they run as ksh as well RUNNER_SCRIPT_DIR={{runner_script_dir}} RUNNER_SCRIPT=${0##*/} RUNNER_BASE_DIR={{runner_base_dir}} RUNNER_ETC_DIR={{runner_etc_dir}} RUNNER_LIB_DIR={{platform_lib_dir}} RUNNER_LOG_DIR={{runner_log_dir}} RUNNER_USER={{runner_user}} WHOAMI=$(whoami) # Make sure this script is running as the appropriate user if ([ "$RUNNER_USER" ] && [ "x$WHOAMI" != "x$RUNNER_USER" ]); then type sudo > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "sudo doesn't appear to be installed and your EUID isn't $RUNNER_USER" 1>&2 exit 1 fi echo "Attempting to restart script through sudo -H -u $RUNNER_USER" >&2 exec sudo -H -u $RUNNER_USER -i $RUNNER_SCRIPT_DIR/$RUNNER_SCRIPT $@ fi # Make sure CWD is set to runner base dir cd $RUNNER_BASE_DIR # Extract the target node name from node.args NAME_ARG=`egrep "^ *-s?name" $RUNNER_ETC_DIR/vm.args` if [ -z "$NAME_ARG" ]; then echo "vm.args needs to have either -name or -sname parameter." exit 1 fi # Learn how to specify node name for connection from remote nodes echo "$NAME_ARG" | grep '^-sname' > /dev/null 2>&1 if [ "X$?" = "X0" ]; then NAME_PARAM="-sname" NAME_HOST="" else NAME_PARAM="-name" echo "$NAME_ARG" | grep '@.*' > /dev/null 2>&1 if [ "X$?" = "X0" ]; then NAME_HOST=`echo "${NAME_ARG}" | sed -e 's/.*\(@.*\)$/\1/'` else NAME_HOST="" fi fi # Extract the target cookie COOKIE_ARG=`grep '\-setcookie' $RUNNER_ETC_DIR/vm.args` if [ -z "$COOKIE_ARG" ]; then echo "vm.args needs to have a -setcookie parameter." exit 1 fi # Identify the script name SCRIPT=`basename $0` # Parse out release and erts info START_ERL=`cat $RUNNER_BASE_DIR/releases/start_erl.data` ERTS_VSN=${START_ERL% *} APP_VSN=${START_ERL#* } # Add ERTS bin dir to our path ERTS_PATH=$RUNNER_BASE_DIR/erts-$ERTS_VSN/bin # Setup command to control the node NODETOOL="$ERTS_PATH/escript $ERTS_PATH/nodetool $NAME_ARG $COOKIE_ARG" # Check the first argument for instructions case "$1" in status) if [ $# -ne 1 ]; then echo "Usage: $SCRIPT status" exit 1 fi RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "Node is not running!" exit 1 fi shift $NODETOOL rpc emqttd_ctl status $@ ;; cluster) if [ $# -gt 2 ]; then echo "Usage: $SCRIPT cluster []" exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "emqttd is not running!" exit 1 fi shift $NODETOOL rpc emqttd_ctl cluster $@ ;; useradd) if [ $# -ne 3 ]; then echo "Usage: $SCRIPT useradd " exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "emqttd is not running!" exit 1 fi shift $NODETOOL rpc emqttd_ctl useradd $@ ;; userdel) if [ $# -ne 2 ]; then echo "Usage: $SCRIPT userdel " exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "emqttd is not running!" exit 1 fi shift $NODETOOL rpc emqttd_ctl userdel $@ ;; broker) if [ $# -gt 2 ]; then echo "Usage: $SCRIPT broker [stats | metrics]" exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "emqttd is not running!" exit 1 fi shift $NODETOOL rpc emqttd_ctl broker $@ ;; bridges) if [ $# -gt 1 ]; then echo "Usage: $SCRIPT bridges" exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "emqttd is not running!" exit 1 fi shift $NODETOOL rpc emqttd_ctl bridges $@ ;; start_bridge) if [ $# -ne 3 ]; then echo "Usage: $SCRIPT start_bridge " exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "emqttd is not running!" exit 1 fi shift $NODETOOL rpc emqttd_ctl start_bridge $@ ;; stop_bridge) if [ $# -ne 3 ]; then echo "Usage: $SCRIPT stop_bridge " exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "emqttd is not running!" exit 1 fi shift $NODETOOL rpc emqttd_ctl stop_bridge $@ ;; listeners) if [ $# -gt 1 ]; then echo "Usage: $SCRIPT listeners" exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "emqttd is not running!" exit 1 fi shift $NODETOOL rpc emqttd_ctl listeners $@ ;; *) echo "Usage: $SCRIPT" echo " status #query emqttd status" echo " listeners #query emqttd listeners" echo " broker [stats | metrics] #query broker stats/metrics" echo " cluster [] #query or cluster nodes" echo " bridges #query bridges" echo " start_bridge #start bridge" echo " stop_bridge #stop bridge" echo " useradd #add user" echo " userdel #delete user" exit 1 ;; esac