#!/bin/bash RUNNER_SCRIPT_DIR=$(cd ${0%/*} && pwd) RUNNER_BASE_DIR=${RUNNER_SCRIPT_DIR%/*} RUNNER_ETC_DIR=$RUNNER_BASE_DIR/etc RUNNER_BIN_DIR=$RUNNER_BASE_DIR/bin RUNNER_LOG_DIR=$RUNNER_BASE_DIR/log RUNNER_EBIN_DIR=$RUNNER_BASE_DIR/ebin RUNNER_USER= # Make sure CWD is set to runner base dir cd $RUNNER_BASE_DIR # Extract the target node name from node.args NAME_ARG=`grep '\-[s]*name' $RUNNER_ETC_DIR/emqtt.args` if [ -z "$NAME_ARG" ]; then echo "emqtt.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/emqtt.args` if [ -z "$COOKIE_ARG" ]; then echo "emqtt.args needs to have a -setcookie parameter." exit 1 fi # Identify the script name SCRIPT=`basename $0` # Parse out release and erts info ERLANG_BASE_DIR=/usr/local/lib/erlang START_ERL=`cat $ERLANG_BASE_DIR/releases/start_erl.data` ERTS_VSN=${START_ERL% *} APP_VSN=${START_ERL#* } # Add ERTS bin dir to our path ERTS_PATH=$ERLANG_BASE_DIR/erts-$ERTS_VSN/bin # Setup command to control the node NODETOOL="$ERTS_PATH/escript $RUNNER_BIN_DIR/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 # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "Node is not running!" exit 1 fi shift $NODETOOL rpc emqtt_ctl status $@ ;; cluster_info) if [ $# -ne 1 ]; then echo "Usage: $SCRIPT cluster_info" exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "Node is not running!" exit 1 fi shift $NODETOOL rpc emqtt_ctl cluster_info $@ ;; cluster) if [ $# -ne 2 ]; then echo "Usage: $SCRIPT cluster " exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "emqtt is not running!" exit 1 fi shift $NODETOOL rpc emqtt_ctl cluster $@ ;; add_user) if [ $# -ne 3 ]; then echo "Usage: $SCRIPT add_user " exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "emqtt is not running!" exit 1 fi shift $NODETOOL rpc emqtt_ctl add_user $@ ;; delete_user) if [ $# -ne 2 ]; then echo "Usage: $SCRIPT delete_user " exit 1 fi # Make sure the local node IS running RES=`$NODETOOL ping` if [ "$RES" != "pong" ]; then echo "emqtt is not running!" exit 1 fi shift $NODETOOL rpc emqtt_ctl delete_user $@ ;; *) echo "Usage: $SCRIPT" echo " status #query emqtt status" echo " cluster_info #query cluster nodes" echo " cluster #cluster node" echo " add_user #add user" echo " delete_user #delete user" exit 1 ;; esac