#!/bin/sh
#ýűΪLinuxjavaͨýűΪserviceűã
#ҲΪjavaĶűʹá
#
#Author: tudaxia.com, Date: 2011/6/7
#
#!!!ýűstopʹϵͳkillǿָֹjava̡
#ɱǰδκ顣ĳЩ£ڽļݿд
#ܻݶʧݲҪǵҪд˽ű
#ִkillǰһϵм顣
#
#
###################################
#ִв
#ҪʵʻԼJava޸Щ
###################################
#JavaڵĿ¼
APP_HOME=`pwd`
#Java
APP_NAME=JDSmsService-web369
#JDK·
JAVA_HOME=$APP_HOME/jdk 
#ִгʹõϵͳûǵȫƼʹrootʺ
RUNNING_USER=`whoami` 
#ҪJavamainࣩ
APP_MAINCLASS=cn.sendsms.jdsmsserver.JDSMSServer 
#ƴclasspathָlibĿ¼еjar
CLASSPATH=
for i in "$APP_HOME"/lib/*.jar
do
   CLASSPATH="$CLASSPATH":"$i"
done 
#java
JAVA_OPTS="-ms512m -mx512m -Xmn256m -Djava.awt.headless=true -XX:MaxPermSize=128m" 
#java
JAVA_ARGS="-Duser.dir=$APP_HOME -Dapp.name=$APP_NAME -Djava.io.tmpdir=$APP_HOME/temp -Djava.library.path=$APP_HOME/bin -Dsendsms.serial.polling -Dsendsms.nocops -Dsendsms.serial.noevents -Dsendsms.serial.pollinginterval=100 -Dsendsms.serial.noflush -Dlog4j.configuration=file:$APP_HOME/conf/debug.conf -Djdsmsserver.configfile=$APP_HOME/conf/JDSMSServer.conf"
###################################
#()жϳǷ
#
#˵
#ʹJDKԴJPSgrepϣ׼ȷpid
#jps  l ʾʾjava·
#ʹawkָpid ($1)Java($2)
###################################
#ʼpsidȫ֣
psid=0 
checkpid() {
   javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS` 
   
   if [ -n "$javaps" ]; then
      psid=`echo $javaps | awk '{print $1}'`
   else
      psid=0
   fi
} 
###################################
#()
#
#˵
#1. ȵcheckpidˢ$psidȫֱ
#2. Ѿ$psid0ʾ
#3. ûбִ
#4. ִкٴεcheckpid
#5. 4Ľܹȷϳpid,ӡ[OK]ӡ[Failed]
#ע⣺echo -n ʾӡַ󣬲
#ע: "nohup ĳ >/dev/null 2>&1 &" ÷
###################################
start() {
   checkpid 
   if [ $psid -ne 0 ]; then
      echo "================================"
      echo "warn: $APP_NAME already started! (pid=$psid)"
      echo "================================"
   else
      echo -n "Starting $APP_NAME ..."
      JAVA_CMD="nohup $JAVA_HOME/bin/java $JAVA_OPTS $JAVA_ARGS -classpath $CLASSPATH $APP_MAINCLASS >/dev/null 2>&1  &"
      su $RUNNING_USER -c "$JAVA_CMD"
      checkpid
      if [ $psid -ne 0 ]; then
         echo "(pid=$psid) [OK]"
      else
         echo "[Failed]"
      fi
   fi
} 
###################################
#()ֹͣ##˵
#1. ȵcheckpidˢ$psidȫֱ
#2. Ѿ$psid0ʼִֹͣʾδ
#3. ʹkill -9 pidǿɱ
#4. ִkillнϲ鿴һķֵ: $?
#5. 4Ľ$?0,ӡ[OK]ӡ[Failed]
#6. Ϊ˷ֹjavaΣӷ̣ɱĴݹstop
#ע⣺echo -n ʾӡַ󣬲
#ע: shellУ"$?" ʾһһķֵ
###################################
stop() {
   checkpid 
   if [ $psid -ne 0 ]; then
      echo -n "Stopping $APP_NAME ...(pid=$psid) "
      su $RUNNING_USER -c "kill $psid"
      if [ $? -eq 0 ]; then
         echo "[OK]"
      else
         echo "[Failed]"
      fi
       checkpid
      if [ $psid -ne 0 ]; then
         stop
      fi
   else
      echo "================================"
      echo "warn: $APP_NAME is not running"
      echo "================================"
   fi
} 
###################################
#()?״?
#
#˵
#1. ȵcheckpidˢ$psidȫֱ
#2. Ѿ$psid0ʾвʾpid
#3. ʾδ
###################################
status() {
   checkpid 
   if [ $psid -ne 0 ];  then
      echo "$APP_NAME is running! (pid=$psid)"
   else
      echo "$APP_NAME is not running"
   fi
} 
###################################
#()ӡϵͳ
###################################
info() {
   echo "System Information:"
   echo "****************************"
   echo `head -n 1 /etc/issue`
   echo `uname -a`
   echo
   echo "JAVA_HOME=$JAVA_HOME"
   echo `$JAVA_HOME/bin/java -version`
   echo
   echo "APP_HOME=$APP_HOME"
   echo "APP_NAME=$APP_NAME"
   echo "****************************"
} 
###################################
#ȡűĵһ($1)ж
#ȡֵΧ{start|stop|restart|status|info}
#ָΧ֮ڣӡϢ
###################################
case "$1" in
   'start')
      start
      ;;
   'stop')
     stop
     ;;
   'restart')
     stop
     start
     ;;
   'status')
     status
     ;;
   'info')
     info
     ;;
  *)
     echo "Usage: $0 {start|stop|restart|status|info}"
     exit 1;;
esac
