#!/bin/sh # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # usage() { echo "Usage: `basename $0` [options] start|stop|restart|check [hosts] Start/stop/restart a cluster on specified hosts or on \$HOSTS via ssh. Options: -l USER Run qpidd and copy files as USER. -e SCRIPT Source SCRIPT for environment settings. Copies SCRIPT to each host. Default is $DEFAULT_ENV. -c CONFIG Use CONFIG as qpidd config file. Copies CONFIG to each host. Default is $DEFAULT_CONF -d Delete data-dir and log file before starting broker. " exit 1 } DEFAULT_CONF=~/qpid-test-qpidd.conf DEFAULT_ENV=~/qpid-test-env.sh test -f $DEFAULT_CONF && CONF_FILE=$DEFAULT_CONF test -f $DEFAULT_ENV && ENV_FILE=$DEFAULT_ENV while getopts "l:e:c:d" opt; do case $opt in l) SSHOPTS="-l$OPTARG $SSHOPTS" ; RSYNC_USER="$OPTARG@" ;; e) ENV_FILE=$OPTARG ;; c) CONF_FILE=$OPTARG ;; d) DO_DELETE=1 ;; *) usage;; esac done shift `expr $OPTIND - 1` test "$*" || usage CMD=$1; shift HOSTS=${*:-$HOSTS} conf_value() { test -f "$CONF_FILE" && awk -F= "/^$1=/ {print \$2}" $CONF_FILE; } if test -n "$CONF_FILE"; then test -f "$CONF_FILE" || { echo Config file not found: $CONF_FILE; exit 1; } RSYNCFILES="$RSYNCFILES $CONF_FILE" QPIDD_ARGS="$QPIDD_ARGS --config $CONF_FILE" CONF_PORT=`conf_value port` CONF_DATA_DIR=`conf_value data-dir` CONF_LOG_FILE=`conf_value log-to-file` fi if test -n "$ENV_FILE"; then test -f "$ENV_FILE" || { echo Environment file not found: $ENV_FILE; exit 1; } RSYNCFILES="$RSYNCFILES $ENV_FILE" SOURCE_ENV="source $ENV_FILE ; " fi test -n "$RSYNCFILES" && rsynchosts $RSYNCFILES # Copy conf/env files to all hosts do_start() { for h in $HOSTS; do COMMAND="qpidd -d $QPIDD_ARGS" id -nG | grep '\' >/dev/null && COMMAND="sg ais -c '$COMMAND'" if test "$DO_DELETE"; then COMMAND="rm -rf $CONF_DATA_DIR $CONF_LOG_FILE; $COMMAND"; fi ssh $h "$SOURCE_ENV $COMMAND" || { echo "Failed to start on $h"; exit 1; } done } do_stop() { for h in $HOSTS; do ssh $h "$SOURCE_ENV qpidd -q --no-module-dir --no-data-dir $QPIDD_ARGS" done } do_status() { for h in $HOSTS; do if ssh $h "$SOURCE_ENV qpidd -c --no-module-dir --no-data-dir $QPIDD_ARGS > /dev/null"; then echo "$h ok" else echo "$h not running" STATUS=1 fi done } case $CMD in start) do_start ;; stop) do_stop ;; restart) do_stop ; do_start ;; status) do_status ;; *) usage;; esac exit $STATUS