components/rabbitmq/files/svc-rabbitmq
branchs11u3-sru
changeset 6035 c9748fcc32de
parent 2785 b6f5c5d1d0b7
child 5776 f6fa335ae47b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/rabbitmq/files/svc-rabbitmq	Fri May 20 17:42:29 2016 -0400
@@ -0,0 +1,104 @@
+#!/usr/bin/bash
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+
+#
+# Copyright (c) 2013, 2015, Oracle and/or its affiliates. All rights reserved.
+#
+
+. /lib/svc/share/smf_include.sh
+
+RABBIT_SERVER=/usr/bin/rabbitmq-server
+RABBIT_CTL=/usr/bin/rabbitmqctl
+
+if [[ -z "$SMF_FMRI" ]]; then
+	echo "This script can only be invoked by smf(5)"
+	exit $SMF_EXIT_ERR_NOSMF
+fi
+
+# rabbitmq-env handles pulling in configuration from a number of sources.  Out
+# of that, the server builds more configuration variables if they haven't
+# already been set.  getenv() gives us the variable as the server would see it.
+# It's up to the caller to massage it as the server would.
+getenv() {
+	# Has the RABBITMQ_ version been set?  If so, that takes precedence.
+	r=$(eval print \$RABBITMQ_${1})
+	if [[ -n $r ]]; then
+		print $r
+	else
+		print $(
+			SCRIPT_DIR=/usr/lib/rabbitmq/bin;
+			. /usr/lib/rabbitmq/bin/rabbitmq-env;
+			eval print \${$1}
+		)
+	fi
+}
+
+# If RABBITMQ_NODENAME isn't set in the environment, then use the FMRI instance
+# name, unless the instance name is "default", in which case we use the default
+# from the configuration files.  If the instance name doesn't have an @ in it,
+# then append the hostname.
+if [[ -z $RABBITMQ_NODENAME ]]; then
+	INSTANCE=${SMF_FMRI##*:}
+	if [[ $INSTANCE == default ]]; then
+		INSTANCE=$(getenv NODENAME)
+	fi
+	if [[ $INSTANCE != *@* ]]; then
+		INSTANCE=$INSTANCE@$(hostname)
+	fi
+	export RABBITMQ_NODENAME=$INSTANCE
+fi
+
+# XXX Why isn't HOME set for us?
+export HOME=/var/lib/rabbitmq
+
+case "$1" in
+"start")
+	$RABBIT_SERVER -detached
+
+	# make sure the service is actually up before returning
+	while true; do
+		/usr/bin/rabbitmqctl list_users > /dev/null 2>&1
+		if [[ $? -ne 0 ]]; then
+			sleep 1
+		else
+			break
+		fi
+	done
+	;;
+"stop")
+	$RABBIT_CTL -n $RABBITMQ_NODENAME stop
+	# XXX epmd should be in a separate SMF service (16749936); for now,
+	# though, be sure to kill it here.
+	epmd_pid=$(pgrep -c $(svcs -H -o ctid $SMF_FMRI) epmd)
+	if [[ -n $epmd_pid ]]; then
+		sleep 2
+		epmd -kill
+	fi
+	;;
+
+*)
+	echo "Usage: $0 { start | stop }"
+	exit $SMF_EXIT_ERR_CONFIG
+	;;
+esac
+
+exit $SMF_EXIT_OK