shellスクリプトjavaプログラムの実行

11452 ワード

次のshellスクリプトでjavaプログラムを起動して停止します.
#!/bin/sh
###################################
#           
#          Java           
###################################
#JDK    
JAVA_HOME="/usr/local/jdk1.8.0_131"

#              ,     ,     root  
RUNNING_USER=lee

#Java       (classes      )
APP_HOME=/home/lee/Coding/cjava/2

#     Java   (main   )
APP_MAINCLASS=huateng/hello

#     classpath  ,    lib      jar
#CLASSPATH=$APP_HOME/classes
#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"

###################################
#(  )         
#
#  :
#  JDK   JPS   grep    ,    pid
#jps   l   ,    java      
#  awk,   pid ($1  ), Java    ($2  )
###################################
#   psid  (  )
psid=0

checkpid() {
   javaps=`ps -ef | grep $APP_MAINCLASS | grep -v "grep"`

   if [ -n "$javaps" ]; then
      psid=`echo $javaps | awk '{print $2}'`
   else
      psid=0
   fi
}

###################################
#(  )    
#
#  :
#1.     checkpid  ,  $psid    
#2.         ($psid   0),        
#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_MAINCLASS already started! (pid=$psid)"
      echo "================================"
   else
      echo -n "Starting $APP_MAINCLASS ..."
      nohup $JAVA_HOME/bin/java $JAVA_OPTS $APP_MAINCLASS >/home/lee/Coding/cjava/2/out.log 2>&1 &
      checkpid
      if [ $psid -ne 0 ]; then
         echo "(pid=$psid) [OK]"
      else
         echo "[Failed]"
      fi
   fi
}

###################################
#(  )    
#
#  :
#1.     checkpid  ,  $psid    
#2.         ($psid   0),       ,  ,       
#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_MAINCLASS ...(pid=$psid) "
      kill -9 $psid
      if [ $? -eq 0 ]; then
         echo "[OK]"
      else
         echo "[Failed]"
      fi

      checkpid
      if [ $psid -ne 0 ]; then
         stop
      fi
   else
      echo "================================"
      echo "warn: $APP_MAINCLASS is not running"
      echo "================================"
   fi
}

###################################
#(  )        
#
#  :
#1.     checkpid  ,  $psid    
#2.         ($psid   0),           pid
#3.   ,       
###################################
status() {
   checkpid

   if [ $psid -ne 0 ];  then
      echo "$APP_MAINCLASS is running! (pid=$psid)"
   else
      echo "$APP_MAINCLASS 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_MAINCLASS=$APP_MAINCLASS"
   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