Mercurial > hg > release > thermostat-0.7
changeset 1050:2dc4ebc08a77
Add wrapper script/systemd unit file for agent.
Reviewed-by: vanaltj, omajid
Review-thread: http://icedtea.classpath.org/pipermail/thermostat/2013-March/006033.html
author | Severin Gehwolf <sgehwolf@redhat.com> |
---|---|
date | Wed, 06 Mar 2013 10:48:34 +0100 |
parents | 3f0416e9db80 |
children | 77607020a4d3 |
files | distribution/scripts/thermostat distribution/scripts/thermostat-agent-sysd distribution/systemd/thermostat-agent.service |
diffstat | 3 files changed, 177 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/distribution/scripts/thermostat Fri Mar 08 14:28:35 2013 +0100 +++ b/distribution/scripts/thermostat Wed Mar 06 10:48:34 2013 +0100 @@ -46,28 +46,29 @@ export THERMOSTAT_HOME THERMOSTAT_LIBS="${THERMOSTAT_HOME}/libs" -# all the various libraries we need, mainly external dependencies -JCOMMON_JAR="${THERMOSTAT_LIBS}/jcommon.jar" -MONGO_JAR="${THERMOSTAT_LIBS}/mongo.jar" -BSON_JAR="${THERMOSTAT_LIBS}/bson.jar" -JOPT_JAR="${THERMOSTAT_LIBS}/jopt-simple-4.3.jar" +# need tools from the JVM TOOLS_JAR="@java.home@/../lib/tools.jar" -NETTY_JAR="${THERMOSTAT_LIBS}/netty-3.2.4.Final.jar" # plus the main services we use and export SERVICE_CLASSPATH="${THERMOSTAT_LIBS}/*" SERVICE_NATIVE="${THERMOSTAT_LIBS}/native" -THERM_DIR=${THERMOSTAT_LIBS} - SERVICE_CLASSPATH="${TOOLS_JAR}:${SERVICE_CLASSPATH}" THERMOSTAT_MAIN="com.redhat.thermostat.main.Thermostat" +function usage() { + echo "$0 [-J<java-opt>] [-Tbg PIDFILE] [THERMOSTAT_ARGS]" >&2 + exit 1 +} + # start parsing arguments, we intercept jvm arguments vs thermostat specific # arguments JAVA_ARGS=() ARGS=() +RUN_IN_BG=0 +PID_FILE="" + i=0 j=0 @@ -77,16 +78,36 @@ -J*) JAVA_ARGS[$i]="${1##-J}" i=$((i+1)) + shift + ;; + -Tbg) + shift + RUN_IN_BG=1 + PID_FILE="$1" + shift ;; *) ARGS[$j]="$1" j=$((j+1)) + shift ;; esac - shift done -# finally run thermostat -${JAVA} "${JAVA_ARGS[@]}" -Djava.library.path=${SERVICE_NATIVE} -cp ${SERVICE_CLASSPATH} ${THERMOSTAT_MAIN} "${ARGS[@]}" -exit $? +# Finally run thermostat (optionally in the background) +if [ $RUN_IN_BG -eq 1 ]; then + # The thermostat-agent-sysd script uses this. + if [ x"$PID_FILE" = "x" ]; then + usage + else + ${JAVA} "${JAVA_ARGS[@]}" -Djava.library.path=${SERVICE_NATIVE} -cp ${SERVICE_CLASSPATH} ${THERMOSTAT_MAIN} "${ARGS[@]}" & + retval=$? + echo $! > $PID_FILE + retval=$(( $retval + $? )) + fi +else + ${JAVA} "${JAVA_ARGS[@]}" -Djava.library.path=${SERVICE_NATIVE} -cp ${SERVICE_CLASSPATH} ${THERMOSTAT_MAIN} "${ARGS[@]}" + retval=$? +fi +exit $retval
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/distribution/scripts/thermostat-agent-sysd Wed Mar 06 10:48:34 2013 +0100 @@ -0,0 +1,89 @@ +#!/bin/bash +# +# Copyright 2012, 2013 Red Hat, Inc. +# +# This file is part of Thermostat. +# +# Thermostat is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published +# by the Free Software Foundation; either version 2, or (at your +# option) any later version. +# +# Thermostat is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Thermostat; see the file COPYING. If not see +# <http://www.gnu.org/licenses/>. +# +# Linking this code with other modules is making a combined work +# based on this code. Thus, the terms and conditions of the GNU +# General Public License cover the whole combination. +# +# As a special exception, the copyright holders of this code give +# you permission to link this code with independent modules to +# produce an executable, regardless of the license terms of these +# independent modules, and to copy and distribute the resulting +# executable under terms of your choice, provided that you also +# meet, for each linked independent module, the terms and conditions +# of the license of that module. An independent module is a module +# which is not derived from or based on this code. If you modify +# this code, you may extend this exception to your version of the +# library, but you are not obligated to do so. If you do not wish +# to do so, delete this exception statement from your version. +# +##################################################################### +# +# for debugging +#set -xv + +if [ $# -ne 1 ]; then + echo "usage: $0 {start|stop|restart}" >&2 + exit 1 +fi + +if [ x"$THERMOSTAT_HOME" = x ] ; then + THERMOSTAT_HOME="@thermostat.home@" +fi + +export THERMOSTAT_HOME +THERMOSTAT_BIN="$THERMOSTAT_HOME/bin/thermostat" +AGENT_PID_FILE="$THERMOSTAT_HOME/agent/run/thermostat-agent.pid" + +function start() { + if [ -e "$AGENT_PID_FILE" ]; then + echo "Agent already running. Use '$0 stop' to stop it." >&2 + exit 1 + fi + # This writes PID of java process to AGENT_PID_FILE + "$THERMOSTAT_BIN" -Tbg "$AGENT_PID_FILE" agent + exit $? +} + +function stop() { + if [ -e "$AGENT_PID_FILE" ]; then + pid=$(cat "$AGENT_PID_FILE") + kill $pid + retval=$? + # cleanup pid + rm -rf "$AGENT_PID_FILE" + exit $retval + else + exit 1 + fi +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; +esac
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/distribution/systemd/thermostat-agent.service Wed Mar 06 10:48:34 2013 +0100 @@ -0,0 +1,55 @@ +# +# Copyright 2012, 2013 Red Hat, Inc. +# +# This file is part of Thermostat. +# +# Thermostat is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published +# by the Free Software Foundation; either version 2, or (at your +# option) any later version. +# +# Thermostat is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Thermostat; see the file COPYING. If not see +# <http://www.gnu.org/licenses/>. +# +# Linking this code with other modules is making a combined work +# based on this code. Thus, the terms and conditions of the GNU +# General Public License cover the whole combination. +# +# As a special exception, the copyright holders of this code give +# you permission to link this code with independent modules to +# produce an executable, regardless of the license terms of these +# independent modules, and to copy and distribute the resulting +# executable under terms of your choice, provided that you also +# meet, for each linked independent module, the terms and conditions +# of the license of that module. An independent module is a module +# which is not derived from or based on this code. If you modify +# this code, you may extend this exception to your version of the +# library, but you are not obligated to do so. If you do not wish +# to do so, delete this exception statement from your version. +# +##################################################################### +# +# Unit file in order to be able to start +# thermostat agent via systemd. +# +[Unit] +Description=Thermostat agent service +After=syslog.target network.target +Documentation=http://icedtea.classpath.org/wiki/Thermostat/Packaging/SystemdServices + +[Service] +Type=forking +ExecStart=@thermostat.home@/bin/thermostat-agent-sysd start +ExecStop=@thermostat.home@/bin/thermostat-agent-sysd stop +PIDFile=@thermostat.home@/agent/run/thermostat-agent.pid +User=@thermostat.system.user@ +Group=@thermostat.system.group@ + +[Install] +WantedBy=multi-user.target