1. 程式人生 > >linux 部署java程式,使其成為服務

linux 部署java程式,使其成為服務

 一個小專案,linux環境下部署,記錄一下:

啟動指令碼comm_mq如下:

#! /bin/sh
#chkconfig:345 61 61
#description:test2Run description
#-------------------------------------------------------------------
# 定義變數
#-------------------------------------------------------------------
APP_NAME=xc_mq
GREP_KEY="Diname="${APP_NAME}

# -Xms512m 設定JVM堆的初始記憶體
# -Xmx1024m 設定JVM堆的最大記憶體
# -Dlog4j.properties #設定log4j日誌檔案引數,可給JAVA程式呼叫,呼叫格式是#System.getProperty("log4j.properties")
#APP_OPTS="-Xrs -Xms512m -Xmx1024m -Dlog4j.properties=../conf/#log4j.properties"

# 程式主類
APP_CLASS="com.tbyf.thread.LanuchServer"

APP_CLASSPATH=${CLASSPATH}

# 檢查xc_mq程序是否已經在執行,如果在執行則返回1,否則返回0
is_exist(){
 # ps -ef : 查詢所有程序
 # grep -w "${GREP_KEY}" : 從所有程序中查出名稱為xc_mq的程序,-w為精確查詢
 # grep -v "grep" : 排除名稱為grep的程序
 # awk '{print $2}' : 輸出第二個引數,也就是程序號
 pid=`ps -ef | grep -w "${GREP_KEY}" | grep -v "grep" | awk '{print $2}'`

 # 判斷程序號是否為空
 if [ -z "${pid}" ]
  then return 1
 else 
  return 0
 fi
}


status(){
 is_exist 
 if [ $? -eq "0" ]
  then echo "${APP_NAME} is running. pid=${pid} ."
 else
  echo "${APP_NAME} is not running"
 fi
}


start(){
 is_exist 
 if [ $? -eq "0" ]
  then echo "${APP_NAME} is already running. pid=${pid} ."
  return 0
 else
  echo "try to start ${APP_NAME} ... "
  
  
# 呼叫nohup命令啟動xc_mq
  # 1>&- : 表示關閉標準輸出日誌到nohup.out  
  # 2>${APP_LOG} : 表示輸出日誌到../logs/log.log
  # 最後的& : 表示退出帳戶/關閉終端時程式不退出
  #              nohup $JAVA_HOME/bin/java -${GREP_KEY} ${APP_OPTS} -#classpath #${APP_CLASSPATH} ${APP_CLASS} 1>&- 2>${APP_LOG} &
 nohup /home/xj/java/jdk1.8.0_171/bin/java -${GREP_KEY}   -classpath ${APP_CLASSPATH} /home/xj/mq.jar ${APP_CLASS} 1>&- &
  # 程式的啟動需要一定的時間,這裡設定暫停時間(3秒),單位是秒
                sleep 3

                is_exist
                if [ $? -eq "0" ]
                then
                        echo "${APP_NAME} is running now. pid=${pid}."
                        return 0
                else
                        echo "failed to start ${APP_NAME}! see ${APP_LOG} for more details."
                        return 1
                fi
 fi
}

# 停止xc_mq程序
stop()
{
 is_exist

 if [ $? -eq 0 ]
  then  echo "try to stop ${APP_NAME} ..."

   # 呼叫kill命令殺掉程序
   /usr/bin/kill -9  ${pid}

   if [ $? -ne 0 ]
    then echo "failed to stop ${APP_NAME}!"
    return 1
   else
    echo "${APP_NAME} stopped."
    return 0
   fi
 else
  echo "${APP_NAME} is not running!"
  return 1
 fi
}


# 重啟xc_mq程序
restart(){
 stop
 start
}


# 顯示幫助資訊
help()
{
echo "status                    show the status of ${APP_NAME} server."
echo "start                    start the ${APP_NAME} server."
echo "stop                      stop the ${APP_NAME} server."
echo "restart                  restart the ${APP_NAME} server."
}


# 主函式
main()
{
 case "$1" in 
 status)  status;;
 start)    start;;
 stop)    stop;;
 restart)  restart;;
 *)        echo "command param error ! see follow help "; help;;
 esac
}

main restart

給指令碼賦予執行許可權,chmod +x comm_mq

讓指令碼隨著機器啟動而啟動,chkconfig --add comm_mq  //把服務或指令碼加入到chkconfig 管理之中

ps:以下三行程式碼是必須的:

#! /bin/sh
#chkconfig:345 61 61
#description:test2Run description