#!/bin/sh JVM=java . /etc/osgiboot/osgi-service-settings.sh APP=$1 CONF_DIR=/etc/$APP if [ -f $CONF_DIR/settings.sh ];then . $CONF_DIR/settings.sh fi LIB_DIR=/usr/share/$APP/lib # read/write EXEC_DIR=/var/lib/$APP DATA_DIR=$EXEC_DIR/data CONF_RW=$EXEC_DIR/conf LOG_DIR=/var/log/$APP LOG_FILE=$LOG_DIR/$APP.log RUN_DIR=/var/run/$APP PID_FILE=$RUN_DIR/$APP.pid SHUTDOWN_FILE=$RUN_DIR/$APP.shutdown OSGI_INSTALL_AREA=/usr/share/osgi/boot OSGI_FRAMEWORK=$OSGI_INSTALL_AREA/org.eclipse.osgi.jar RETVAL=0 start() { if [ -f $PID_FILE ];then PID=`cat $PID_FILE` kill -0 $PID &> /dev/null PID_EXISTS=$? if [ $PID_EXISTS -eq 0 ]; then echo $APP already running with pid $PID RETVAL=1 return $RETVAL else echo Old $APP process with pid $PID is dead, removing $PID_FILE rm -f $PID_FILE fi fi if [ ! -f $CONF_RW/config.ini ]; then #echo osgi.configuration.cascaded=true > $CONF_RW/config.ini #echo osgi.sharedConfiguration.area=$CONF_DIR >> $CONF_RW/config.ini #echo osgi.sharedConfiguration.area.readOnly=true >> $CONF_RW/config.ini cp --preserve $CONF_DIR/config.ini $CONF_RW/config.ini fi touch $SHUTDOWN_FILE cd $EXEC_DIR $JVM \ -Dargeo.osgi.shutdownFile="$SHUTDOWN_FILE" \ -Dlog4j.configuration="file:$CONF_DIR/log4j.properties" \ -Djava.security.manager= \ -Djava.security.policy="file:/etc/osgiboot/all.policy" \ $JAVA_OPTS -jar $OSGI_FRAMEWORK \ -clean \ -configuration "$CONF_RW" \ -data "$DATA_DIR" \ >> $LOG_FILE 2>&1 & # (above) stderr redirected to stdout, then stdout to log file # see http://tldp.org/LDP/abs/html/io-redirection.html PID=$! echo $PID > $PID_FILE #echo Started $APP with pid $PID return $RETVAL } 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 # wait 5 min for application to shutdown, then kill it TIMEOUT=$((5*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 # timeout is only available in EL6 # timeout 5m sh << EOF #while kill -0 $PID &> /dev/null; do sleep 1; done #EOF # TIMEOUT_EXIT=$? # if [ $TIMEOUT_EXIT -eq 124 ];then # kill -9 $PID # RETVAL=1 # echo Killed $APP with pid $PID # else # echo Stopped $APP with pid $PID # fi # 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 "$2" in start) start ;; stop) stop ;; status) status ;; *) echo $"Usage: $0 {start|stop|status}" exit 1 esac