#!/bin/sh APP=argeo if [ -z "$2" ]; then # Default node CONF_DIR=/etc/$APP EXEC_DIR=/var/lib/$APP else # Instance INSTANCE=$2 if [ -z "$STATE_DIRECTORY" ]; then INSTANCE_DIR=$HOME/.local/share/$APP.d/$INSTANCE else # systemd StateDirectory= INSTANCE_DIR=$STATE_DIRECTORY fi if [ -z "$CONFIGURATION_DIRECTORY" ]; then CONF_DIR=$HOME/.config/$APP.d/$INSTANCE else # systemd ConfigurationDirectory= CONF_DIR=$CONFIGURATION_DIRECTORY fi EXEC_DIR=$INSTANCE_DIR if [ ! -f $CONF_DIR/$APP.ini ]; then cp /etc/$APP/$APP.ini $CONF_DIR fi if [ ! -f $CONF_DIR/log4j.properties ]; then cp /etc/$APP/log4j.properties $CONF_DIR fi fi JVM=java # Directories and files BASE_POLICY_ALL=/usr/share/$APP/all.policy BASE_CONFIG_INI=/usr/share/$APP/config.ini CONF_DIRS=$CONF_DIR/conf.d DATA_DIR=$EXEC_DIR/data CONF_RW=$EXEC_DIR/state CONFIG_INI=$CONF_RW/config.ini # A2 sources can be overridden in *.ini files A2_SOURCES=a2:/// OSGI_INSTALL_AREA=/usr/share/osgi/boot OSGI_FRAMEWORK=$OSGI_INSTALL_AREA/org.eclipse.osgi.jar # Overwrite variables if [ -f $CONF_DIR/settings.sh ];then . $CONF_DIR/settings.sh fi RETVAL=0 start() { mkdir -p $CONF_RW mkdir -p $DATA_DIR # Merge config files printf "## Equinox configuration - Generated by /usr/sbin/nodectl ##\n\n" > $CONFIG_INI cat $BASE_CONFIG_INI >> $CONFIG_INI printf "\n##\n## $CONF_DIR/$APP.ini\n##\n\n" >> $CONFIG_INI cat $CONF_DIR/$APP.ini >> $CONFIG_INI for file in `ls -v $CONF_DIRS/*.ini`; do printf "\n##\n## $file\n##\n\n" >> $CONFIG_INI cat $file >> $CONFIG_INI done; cd $EXEC_DIR $JVM \ -Dlog4j.configuration="file:$CONF_DIR/log4j.properties" \ $JAVA_OPTS -jar $OSGI_FRAMEWORK \ -Dargeo.osgi.sources=$A2_SOURCES \ -configuration "$CONF_RW" \ -data "$DATA_DIR" } reload() { echo Not yet implemented } stop() { if [ -f $PID_FILE ];then PID=`cat $PID_FILE` kill -0 $PID &> /dev/null PID_EXISTS=$? if [ $PID_EXISTS -ne 0 ]; then echo Dead $APP process with pid $PID, removing $PID_FILE rm -f $PID_FILE RETVAL=1 return $RETVAL fi else echo $APP is not running RETVAL=1 return $RETVAL fi # notifies application by removing the shutdown file # rm -f $SHUTDOWN_FILE kill $PID # wait 10 min for application to shutdown, then kill it TIMEOUT=$((10*60)) BEGIN=$(date +%s) while kill -0 $PID &> /dev/null do sleep 1 NOW=$(date +%s) DURATION=$(($NOW-$BEGIN)) if [ $DURATION -gt $TIMEOUT ]; then kill -9 $PID echo Forcibly killed $APP with pid $PID RETVAL=1 fi done # remove pid file rm -f $PID_FILE return $RETVAL } status() { if [ -f $PID_FILE ];then PID=`cat $PID_FILE` else echo $APP is not running return $RETVAL fi kill -0 $PID &> /dev/null PID_EXISTS=$? if [ $PID_EXISTS -eq 0 ]; then echo $APP is running with pid $PID ... else echo No $APP process with pid $PID, removing $PID_FILE rm -f $PID_FILE fi return $RETVAL } # main case "$1" in start) start ;; reload) reload ;; stop) stop ;; status) status ;; *) echo $"Usage: $0 {start|stop|status}" exit 1 esac