]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - osgi/dist/osgi-boot/src/main/rpm/usr/sbin/osgi-service
Adapt OSGi service script to EL5
[lgpl/argeo-commons.git] / osgi / dist / osgi-boot / src / main / rpm / usr / sbin / osgi-service
index 7d1ad6e5cd447df9d9579446da11e9d8c551b1e2..27f6824b92a16ba959577eb96b9d0c2fc6b93348 100644 (file)
@@ -16,9 +16,11 @@ LIB_DIR=/usr/share/$APP/lib
 EXEC_DIR=/var/lib/$APP
 DATA_DIR=$EXEC_DIR/data
 CONF_RW=$EXEC_DIR/conf
-LOG_FILE=/var/log/$APP.log
 
-RUN_DIR=/var/run
+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
 
@@ -28,7 +30,21 @@ OSGI_FRAMEWORK=$OSGI_INSTALL_AREA/org.eclipse.osgi.jar
 RETVAL=0
 
 start() {
-       cp $CONF_DIR/config.ini $CONF_RW/config.ini
+       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
+
+       cp --preserve $CONF_DIR/config.ini $CONF_RW/config.ini
        touch $SHUTDOWN_FILE
        cd $EXEC_DIR
        $JVM \
@@ -40,33 +56,89 @@ start() {
                -clean \
                -configuration "$CONF_RW" \
                -data "$DATA_DIR" \
-               &>> $LOG_FILE &
+               >> $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
+       #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
-       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
-       fi
+       
+       # 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
-       echo Stopped $APP with pid $PID
        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
 }
 
-# See how we were called.
+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
@@ -74,20 +146,10 @@ case "$2" in
   stop)
         stop
         ;;
-  restart)
-        stop
-        start
-        RETVAL=$?
-        ;;
   status)
-       if [ -f $PID_FILE ];then
-               PID=`cat $PID_FILE`
-               echo $APP is running with pid $PID ...
-       else
-               echo $APP is not running
-       fi
+       status
         ;;
   *)
-        echo $"Usage: $0 {start|stop|restart|status}"
+        echo $"Usage: $0 {start|stop|status}"
         exit 1
 esac
\ No newline at end of file