zoukankan      html  css  js  c++  java
  • java项目启动脚本

    我们公司由于是基于spring cloud开发的java项目,所以所有项目启动都是基于jar包形式的微服务启动的,下面的server_pwd.txt是配置的java启动参数

    #!/bin/bash 
    ## java env
    PATH_WEBAPPS=/opt/platform/
    export JAVA_HOME=/opt/platform/tools/jdk1.8.0_111
    export JRE_HOME=$JAVA_HOME/jre
    
    export JAR_NAME=`grep "$1" ${PATH_WEBAPPS}/server_pwd.txt|awk '{print $NF}'`
    LOG_NAME=`grep "$1" ${PATH_WEBAPPS}/server_pwd.txt|awk '{print $NF}' |grep -o "[^/]*$" |awk -F "-" '{print $3}' |cut -d"." -f1`
    DIRECTORY=`grep "$1" ${PATH_WEBAPPS}/server_pwd.txt|awk '{print $NF}' |cut -d"/" -f4`
    PATH_PWD=$(cd `dirname $0`;echo `pwd`)
    PATH_TO_JAR=${PATH_WEBAPPS}/$DIRECTORY/${JAR_NAME}
    
    PATH_LOG=/data/pdms_data/$LOG_NAME
    COMMAND_SS=`find /usr -type f -name "ss" | sed -n "1p" | tr -d " "`
    #PID_PATH_NAME=/var/run/${JAR_NAME}.pid
    #检查日志
    service_check(){
    if [ -L ${PATH_LOG}/${JAR_NAME}.log ];then
    rm -f ${PATH_LOG}/${JAR_NAME}.log && 
    echo "${PATH_LOG}/${JAR_NAME}.log has been deleted." 
    return 0;
    fi
    }
    
    #检查服务状态
    service_status(){
    while read line 
    do
    ps -ef | grep -e "${line}" | grep -v grep >/dev/null 2>&1
    if [ $? -ne 0 ];then
    echo -e "33[32m ${line} is running. 33[0m"
    # rm -rf $PID_PATH_NAME
    # return 1;
    else
    echo -e "33[31m ${line} is not running. 33[0m"
    # ps -ef | grep $PATH_TO_JAR | grep -v grep | awk '{print $2}' > $PID_PATH_NAME >/dev/null 2>&1
    # return 0;
    fi
    done<${PATH_WEBAPPS}/server_pwd.txt
    }
    
    #强制停止服务进程
    service_stop_force(){
    for i in `ps -ef |grep java | grep "/opt/platform/" |grep pdms | grep -v grep | awk '{print $2}'`
    do
    echo $i
    if [ ! -n $i ];then
    # rm -rf $PID_PATH_NAME
    echo -e "33[32m $i has been killed 33[0m"
    # return 0;
    else
    echo -e "33[33m $i will be killed by force! 33[0m"
    kill -9 $i
    # rm -rf $PID_PATH_NAME
    # return 0;
    fi
    done
    }
    
    #启动所有服务
    service_start(){
    while read line
    do 
    nohup $JAVA_HOME/bin/java -jar ${line} >/dev/null 2>&1 &
    if [ $? -ne 0 ];then
    echo -e "33[31m ${line} started failed 33[0m"
    # exit 1
    else
    # echo $! > $PID_PATH_NAME
    echo -e "33[32m ${line} started ... 33[0m"
    fi
    sleep 2
    # set +e
    # return 0;
    done<${PATH_WEBAPPS}/server_pwd.txt 
    }
    
    #优雅停止服务
    service_stop(){
    for p in `ps -ef |grep java | grep "/opt/platform" |grep pdms | grep -v grep | awk '{print $2}'`
    do
    if [ ! -n $p ]; then
    echo -e "33[33m $p is not running ... 33[0m"
    # echo "$JAR_NAME stopped ..." 
    # rm -rf $PID_PATH_NAME 
    # return 0; 
    else 
    echo -e "33[32m $p stoping ... 33[0m" 
    kill $p
    # return 1; 
    fi 
    done 
    }
    
    #更新服务并重启 
    service_update(){
    file_directory=$2
    backup=${PATH_WEBAPPS}backup/
    datetime=$(date +%Y%m%d)
    update=/root/update/
    if [ -d ${update} ];then
    for acfile in $file_directory.jar
    do
    for acfile1 in "${PATH_WEBAPPS}$file_directory/$file_directory.jar"
    do
    diff ${update}$acfile ${acfile1}>/dev/null
    if [ $? -eq 0 ];then
    echo -e "33[31malready new file for $acfile133[0m"
    elif [ -f ${update}$file_directory.jar ];then
    mkdir ${backup}$datetime
    cp ${PATH_WEBAPPS}$file_directory/$file_directory.jar ${backup}$datetime
    cp ${update}$file_directory.jar ${PATH_WEBAPPS}$file_directory/
    if [ $? -eq 0 ];then
    echo -e "33[32m $acfile update success ${acfile1} 33[0m"
    return 3
    else
    echo -e "33[31m $acfile update faild in ${acfile1} 33[0m"
    fi
    else
    echo -e "33[31m $acfile is not exists... 33[0m"
    fi
    # else
    # "The update directory does not exist"
    
    done
    done
    fi
    }
    
    #回滚日期显示
    service_rollback_list(){
    Datetime=$(date +%Y%m%d)
    echo -e "33[32m 最近五个可以回滚版本的日期 33[0m"
    cd ${PATH_WEBAPPS}backup
    ls -l |awk '{print $9}' |grep -v "^$" |head -5
    }
    
    #回滚版本选择并重启
    service_rollback_pro(){
    echo -e "33[32m $(date)------------rollback version 33[0m"
    read -p "请您输入想要回退的版本日期: " DATE
    Version=$DATE
    Name=$2
    backup_directory=${PATH_WEBAPPS}backup
    echo -e "33[41;1m######################### 开始还原到 $Version 版本 #########################33[0m"
    if [ ! -n "$Version" ];then
    echo -e "33[33m 没有此版本 33[0m"
    exit 1
    fi
    if [ -d ${backup_directory}/$Version ];then
    PID=`ps -ef|grep -v grep |grep $Name|awk '{print $2}'`
    kill -9 $PID
    sleep 1
    cp $backup_directory/$Version/$Name.jar /opt/platform/$Name/
    nohup $JAVA_HOME/bin/java `grep $Name ${PATH_WEBAPPS}server_pwd.txt` >/dev/null 2>&1 &
    if [ $? -eq 0 ]; then
    echo -e "33[32m 已经还原到 $Version 版本 33[0m"
    exit 0
    else
    echo -e "33[31m 还原失败 33[0m"
    exit 1
    fi
    fi
    }
    
    #未用 
    service_application(){
    file=$2
    echo $file
    Pid=`ps -ef|grep -v grep |grep -e $file|awk '{print $2}'`
    echo Pid
    kill $Pid && echo "`date "+%F %T"` $file killed "
    sleep 3
    ps -ef |grep -v grep |grep $file
    if [ $? -eq 0 ]; then
    kill -9 $Pid >/dev/null
    echo -e "33[31m $file process is forcibly killed 33[0m"
    fi
    
    nohup $JAVA_HOME/bin/java `grep $file ${PATH_WEBAPPS}/server_pwd.txt` >/dev/null 2>&1 &
    if [ $? -eq 0 ]; then
    echo -e "33[32m start $file ok 33[0m"
    exit 0
    else
    echo -e "33[31m start $file error 33[0m"
    exit 1
    fi
    }
    
    service_tag(){
    echo -e "33[32m----------------------------------------------------------------------------------------------------------33[0m"
    }
    
    service_info(){
    service_tag
    echo "info-use service ${JAR_NAME} start|stop|status|restart"
    echo "info-jar $PATH_TO_JAR"
    echo "info-log ${PATH_LOG}/$LOG_NAME.log"
    # echo "info-gc-log ${PATH_LOG}/${JAR_NAME}_gc.log"
    # echo "info-heapdump-log ${PATH_LOG}"
    # echo "info-memory -Xms256m -Xmx2048m"
    service_tag
    }
    
    # 接收命令开始
    case "$1" in
    "status")
    service_tag
    service_status
    service_info
    ;; 
    "start") 
    # service_status >/dev/null 2>&1
    # service_check
    service_start 
    service_tag
    # service_status
    ;; 
    "stop") 
    # service_status >/dev/null 2>&1
    service_tag
    service_stop 
    sleep 3
    service_stop_force
    ;; 
    "restart") 
    # service_status >/dev/null 2>&1
    service_stop
    sleep 10
    service_stop_force
    # service_check
    service_start 
    service_tag
    # service_status
    ;; 
    "update")
    service_tag
    service_update $1 $2
    # service_application $1
    if [ $? -eq 3 ];then
    Pid=`ps -ef|grep $2 |grep -v grep |awk '{print $2}'`
    echo $Pid
    # kill $Pid && echo "`date "+%F %T"` $2 killed "
    sleep 3
    #    ps -ef|grep -v grep |grep $2 |awk '{print $2}'
    # if [ $? -eq 0 ]; then
    # kill -9 $Pid >/dev/null
    # echo -e "33[31m $2 process is forcibly killed 33[0m"
    # fi
    
    nohup $JAVA_HOME/bin/java `grep $2 ${PATH_WEBAPPS}/server_pwd.txt` >/dev/null 2>&1 &
    if [ $? -eq 0 ]; then
    echo -e "33[32m start $2 ok 33[0m"
    exit 0
    else
    echo -e "33[31m start $2 error 33[0m"
    exit 1
    fi
    else 
    echo -e "33[31 Applications do not need to be updated 33[0m"
    fi
    ;;
    "rollback")
    service_rollback_list
    service_rollback_pro $1 $2
    ;;
    *) 
    echo $JAR_NAME
    JAR_COMSPid=`ps -ef|grep -v grep |grep -e "${JAR_NAME}"|awk '{print $2}'`    
    echo JAR_COMSPid 
    kill $JAR_COMSPid && echo "`date "+%F %T"` $1 killed "
    sleep 3
    ps -ef |grep -v grep |grep -e "${JAR_NAME}"
    if [ $? -eq 0 ]; then
    kill -9 $JAR_COMSPid >/dev/null
    echo -e "33[31m ${JAR_NAME} process is forcibly killed 33[0m"
    fi
    
    nohup $JAVA_HOME/bin/java `grep ${JAR_NAME} ${PATH_WEBAPPS}/server_pwd.txt` >/dev/null 2>&1 & 
    if [ $? -eq 0 ]; then
    echo -e "33[32m start $1 ok 33[0m"
    exit 0
    else
    echo -e "33[31m start $1 error 33[0m"
    exit 1
    fi
    
    ;;
    esac

     

    server_pwd.txt内容

     -server -Xms1024m -Xmx1024m -jar 应用目录路径

    -server -Xms1024m -Xmx1024m -jar 应用目录路径

    -server -Xms1024m -Xmx1024m -jar 应用目录路径

    #!/bin/bash
    APPPATH=/opt/platform/
    BASENAME=$(basename $0)
    echo "$BASENAME" | grep '/'
    if [ $? -eq 0 ]; then
      WORKDIR=${BASENAME%/*}
    else
      WORKDIR=$(pwd)
    fi
    
    cd $WORKDIR
    EXEC=$WORKDIR/$BASENAME
    
    ## java env
    export JAVA_HOME=/opt/tools/jdk1.8.0_111
    export JRE_HOME=$JAVA_HOME/jre
    #export JAR_NAME=`grep -w  "$1"  $APPPATH/server_pwd.txt|awk '{print $NF}'`
    
    
    function stopjava(){
         tac $APPPATH/server_pwd.txt >/tmp/jar_pwd_tac02.txt
         awk -F"/" '{print $NF}' /tmp/jar_pwd_tac02.txt > /tmp/service.txt
         while read COMS_tacPWD 
         do
             echo $COMS_tacPWD
             pidnu=`ps -ef|grep "${COMS_tacPWD}"|grep -v grep|awk '{print $2}'`
             if [ -n "$pidnu" ];then
                 kill -15 $pidnu
                 sleep 1
             else
                 echo "${COMS_tacPWD}未启动"
             fi
             count=`ps -ef|grep -v grep |grep -e "${COMS_tacPWD}"|awk '{print $2}' |wc -l`
             while [ $count -gt 0 ]
                do
                    sleep 1
                    count=`ps -ef|grep -v grep |grep -e "${COMS_tacPWD}"|awk '{print $2}' |wc -l`
                    echo $count
                done
         echo "=== stop ${COMS_tacPWD} ===success"
      done</tmp/service.txt
    #        echo "success kill"
    
    #         if [ -z "$pidnu" ];then
    #         echo "$COMS_tacPWD has stopped"
    #         sleep 1
    #         continue
    #         fi
    
    #         kill -9  $pidnu  && echo "`date "+%F %T"` ${COMS_tacPWD} killed "
    #         sleep 5
    #       if [ $? -eq 0 ]; then
    #          echo " stop coms-jar-all ok"
    #        else
    #          echo "stop coms-jar-all error"
    #        fi
    }
    
    function startjava()
    {
         tac $APPPATH/server_pwd.txt >/tmp/jar_pwd_tac02.txt
         awk -F"/" '{print $NF}' /tmp/jar_pwd_tac02.txt > /tmp/service.txt
         while read COMS_PWD 
         do
             pidnu=`ps -ef|grep "$COMS_PWD"|grep -v grep|awk '{print $2}'`
             if [ ! -z "$pidnu" ];then
             echo "$COMS_PWD has started"
             sleep 1
             continue
             fi
         done</tmp/service.txt
         while read ServerName
         do
            nohup $JRE_HOME/bin/java  $ServerName >/dev/null 2>&1 &
            sleep 5
            echo "=== start ${ServerName} ===success"
         done<$APPPATH/server_pwd.txt
    }
    
    function restartjava()
    {
       stopjava 
       startjava
    
    
    }
    
    case "$1" in 
      stop)
          stopjava
          ;;
      start)
          startjava
          ;;
      restart)
          restartjava
          ;;
      update-all)
            $EXEC stop
            sleep 15
            $EXEC start
            echo "=== restart coms-jar-all"
            ;;
      *)
            echo "Now Stoping ==== $JAR_NAME ===="
            JAR_COMSPid=`ps -ef|grep -v grep |grep -e "${JAR_NAME}"|awk '{print $2}'`
            echo "Pid Number is === $JAR_COMSPid ==="
            #kill -9 $JAR_COMSPid  && echo " Operation Time is:=== `date "+%F %T"` $1 killed === "
            kill -15 $JAR_COMSPid
            sleep 1
            count=`ps -ef|grep -v grep |grep -e "${JAR_NAME}"|awk '{print $2}' |wc -l`
    #       count=1
            while [ $count -gt 0 ]
                do
                    sleep 1
                    count=`ps -ef|grep -v grep |grep -e "${JAR_NAME}"|awk '{print $2}' |wc -l`
                    echo $count
                done
            echo "success kill"
           
            nohup $JRE_HOME/bin/java  `grep ${JAR_NAME} $APPPATH/server_pwd.txt` >/dev/null 2>&1 &
            if [ $? -eq 0 ]; then
            echo " Starting ==== $1 OK ===="
            exit 0
        else
            echo "start $1 error"
            exit 1
        fi
    
            ;;
    esac
    exit 0
    #!/bin/bash
    
    ###############
    ###:@Target:    restart pdms-pdloan services
    ###:Author:     Robert Luo
    ###:DATE :      20170306
    ###:Email :     robert_luo1949@163.com
    ###:Deploy env: Centos 6.6
    ###:Other:      jenkins version : 2.7.2
    ###############
    
    ####content structure###
    #@01 define var and functions
    #@02 get queque of jar packages
    #@03 shutdown  jar packages
    #@04 check shutdowned status of jar packages
    #@05 starting jar packages
    #@06 check started status of jar packages
    ####content structure###
    
    #@01 define var and functions
    countpid="00"
    pdms_HE="/opt/platform/data"
    JRE_HOME="/usr/local/jdk1.8.0_111/jre"
    JAVA_HOME="/usr/local/jdk1.8.0_111"
    PATH=$PATH:$HOME/bin
    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    
    
    #@02 get queque of jar packages
    cd ${pdms_HE}
    filelist=$(cat server_pwd.txt)
    count=`cat server_pwd.txt |grep jar |wc -l` ##count jar packages and assign to variable of count
    jarfile=`sed -n ${i}p server_pwd.txt`   ##get jar package list and assign to variable of jarfile
    jarshortfile=${jarfile##*-jar}  ##get shortage jar package list and assign to variable of jarshortfile
    ##   jarfile=`cat server_pwd.txt |head -n ${i} |tail -n 1 `
    tac ${pdms_HE}/server_pwd.txt >>/tmp/jar_pwd_tac.txt   ##write jar package list order by esc
    
    #@01 define var and functions
    function Do_kill_ALL () {
      ##pkill -term java
      kill -TERM  `ps -ef|grep -v grep |grep -e "$1"|awk '{print $2}'` && echo "`date "+%F %T"` $1 killed "
      countpid=`ps -ef |grep java |grep -v grep |wc -l`
      echo -e "The sum number of current jars is:c"& echo {countpid}
    #  if [${countpid} -eq 0];then
      if [ ${countpid} -eq 0 ] ; then
        echo "☆☆☆☆☆☆☆☆SHUTDOWN: Shutdowned jar packages successfully!"
      else
        echo "☆☆☆☆☆☆☆☆SHUTDOWN: Shutdowned jar packages unsuccessfully!"
      fi
    }
     function Do_kill () {
      ##pkill -term java
       #kill -TERM  `ps -ef|grep -v grep |grep -e "$1"|awk '{print $2}'` && echo "`date "+%F %T"` $1 killed "
      ##echo $1
      ##jarpid=`ps -ef |grep "$1" |grep -v grep |awk '{print $2}'`
      ps -ef | grep -v grep | grep $1 | awk '{printf(" kill %s
    ",$2)}' | sh
      echo  -e "☆☆☆☆☆☆☆☆KILL: killing:  c"&& echo $1
     }
    
    function Do_start () {
      #echo $JRE_HOME
      #echo $1
    #  nohup $JRE_HOME/bin/java  $1&>/dev/null 2>&1 &
      nohup $JRE_HOME/bin/java  $1&>/dev/null 2>&1 &
      echo -e "count jar number:c"
      echo $2
      if [ ${countpid} -eq 1 ] ;then
            echo "☆☆☆☆☆☆☆☆START: starting $1 jar package."
      else
            echo "☆☆☆☆☆☆☆☆START: starting $1 jar package."
      fi
    
    }
    
    function Do_check () {
      countpid=`ps -ef |grep $1 |grep -v grep |wc -l`
      #echo ${countpid}
      if [ ${countpid} -eq 1 ] ;then
            echo "☆☆☆☆☆☆☆☆CHECK: Started $2 jar packages successfully!"
      else
            echo "☆☆☆☆☆☆☆☆CHECK: Started $2 jar packages unsuccessfully!"
      fi
    
    }
    
    function Do_check_kill () {
      countpid=`ps -ef |grep $1 |grep -v grep |wc -l`
       if [ ${countpid} -eq 0 ] ;then
          echo "☆☆☆☆☆☆☆☆CHECK: kill  pd_loan  jar packages successfully!"
       else
          echo "☆☆☆☆☆☆☆☆CHECK: kill  pd_loan  jar packages unsuccessfully!"
          echo "☆☆☆☆☆☆☆☆CHECK: exec command pkill -term java"
          pkill -term $1
          sleep 5s
       fi
    }
    #@03 shutdown pids of jar packages
    for (( i=1;i<=$count;i++ ))
    do
        echo  -e "kill jar number :c"
        echo ${i}
        jarfileesc=`sed -n ${i}p /tmp/jar_pwd_tac.txt`
        jarshortfileesc=${jarfileesc##*-jar}
        ##echo ${jarshortfileesc}
        Do_kill ${jarshortfileesc}
        delaynum=$[${count} - 3]   ##define how many delay pid numbers
        if [ ${i} -le ${delaynum} ];then
           sleep 1s ###front 3 jars sleep 1 seconds
        else
           sleep 3s  ###other jars sleep 3 second
        fi
    
    done
    Do_check_kill "java"
    
    
    #@04 starting pids of jar packages jar packages within for loop
    for (( i=1;i<=$count;i++ ))
    do
    ##   jarfile=`cat server_pwd.txt |head -n ${i} |tail -n 1 `
       jarfile=`sed -n ${i}p ${pdms_HE}/server_pwd.txt`
    
    #@05 starting pids of jar packages
       jarshortfile=${jarfile##*-jar}
       Do_start "${jarfile}" ${i}
       if [ ${i} -le 2 ];then
          sleep 15s ###front 3 jars sleep 10 seconds
       else
          sleep 4s  ###other jars sleep 1 second
       fi
        #@06 check started status of jar packages
       Do_check "${jarshortfile}" "${jarfile}"
    done
    View Code
  • 相关阅读:
    .NET 4.5 Task异步编程学习资料
    ASP.NET MVC5 支持PUT 和DELETE
    Web Api
    jexus linux x64[标准版]
    redis-window 集群配置
    响应式网格视图css
    json字符串到js对象的转换
    Activity中UI框架基本概念
    Spring AOP 详解
    行为触发之Android自动化测试instrumentation(一)
  • 原文地址:https://www.cnblogs.com/qinghe123/p/8127102.html
Copyright © 2011-2022 走看看