#!/usr/bin/env bash # # 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. # # # qpidd Startup script for the Qpid messaging daemon. # ### BEGIN INIT INFO # Provides: qpidd # Required-Start: $local_fs # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start or stop qpidd # Description: Qpidd is an AMQP broker. It receives, stores, routes and forwards messages using the AMQP protcol. ### END INIT INFO # chkconfig: - 85 15 # description: Qpidd is an AMQP broker. It receives, stores, routes and forwards messages using the AMQP protcol. # processname: qpidd prog=qpidd lockfile=/var/lock/subsys/$prog pidfile=/var/run/qpidd.pid # The following variables can be overridden in @sysconfdir@/sysconfig/$prog QPID_INIT=@initdir@/$prog QPID_BIN=@sbindir@/$prog QPID_DATA_DIR=/var/lib/qpidd QPID_CONFIG=@confdir@/qpidd.conf QPID_HA=@bindir@/qpid-ha QPID_HA_OPTIONS="--config $QPID_CONFIG" # Source configuration test -f @sysconfdir@/sysconfig/$prog && source @sysconfdir@/sysconfig/$prog source /etc/rc.d/init.d/functions # Data dir: respect the config file if set. grep -q '^ *data-dir *=' $QPID_CONFIG || QPIDD_OPTIONS="$QPIDD_OPTIONS --data-dir=$QPID_DATA_DIR" # Check presence of executables/scripts for f in $QPID_BIN; do test -x $f || { echo "$f not found or not executable"; exit 5; } done qpid_ping() { test -x $QPID_HA || return 0 # Only if qpid-ha installed $QPID_HA $QPID_HA_OPTIONS ping >/dev/null 2>&1 } qpid_is_primary() { # Only if qpid-ha is installed. test -x $QPID_HA && $QPID_HA $QPID_HA_OPTIONS status --is-primary >/dev/null 2>&1 } RETVAL=0 # Ensure user has sufficient permissions runuser -s /bin/sh qpidd -c "echo x > /dev/null" 2> /dev/null || RETVAL=4 if [ $RETVAL = 4 ]; then echo "user had insufficient privilege"; exit $RETVAL fi do_status() { # Check PID file and ping for liveness MESSAGE=$(status -p $pidfile $prog) && { qpid_ping || return 1 } RC=$? echo $MESSAGE return $RC } FLOCK_FD=9 # Ensure no concurrent start/stop of services. lock() { [ "$QPID_HA_LOCK_HELD" ] || { # Held by caller exec 9< $QPID_INIT flock $FLOCK_FD } } start() { lock echo -n $"Starting Qpid AMQP daemon: " daemon --pidfile $pidfile --check $prog --user qpidd $QPID_BIN --config $QPID_CONFIG --daemon $QPIDD_OPTIONS --close-fd $FLOCK_FD RETVAL=$? echo [ $RETVAL = 0 ] && touch $lockfile if [ $RETVAL = 0 ]; then touch $pidfile chown qpidd.qpidd $pidfile [ -x /sbin/restorecon ] && /sbin/restorecon $pidfile runuser - -s /bin/sh qpidd -c "$QPID_BIN --config $QPID_CONFIG --check > $pidfile" fi return $RETVAL } stop() { lock # Primary script does not stop backup brokers and vice versa. if qpid_is_primary; then [ "$1" != primary ] && SKIP="Not stopping Qpid daemon, primary" else [ "$1" = primary ] && SKIP="Not stopping Qpid daemon, not primary" fi if [ -n "$SKIP" ]; then echo -n "$SKIP: " success RETVAL=0 else echo -n $"Stopping Qpid AMQP daemon: " killproc -p ${pidfile} $prog RETVAL=$? [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile} fi echo return $RETVAL } reload() { echo 1>&2 $"$0: reload not supported" return 3 } restart() { stop && start } # See how we were called. case "$1" in start|stop|restart|reload) $1 $2 ;; status) do_status RETVAL=$? ;; force-reload) restart ;; try-restart|condrestart) [ -e $lockfile ] && restart || : ;; *) echo 1>&2 $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|force-reload}" exit 2 esac exit $RETVAL