java程序启动脚本

#!/bin/bash
#
# description: {{ APPID }} init script
# processname: tomcat  
# chkconfig: 234 20 80 

APPID="AppPurchaseService"
USER="deploy"

### paths
PROJECT_DIR=/workspace/carkey/AppPurchaseService/latest/
PROJECT_LOG=/workspace/carkey/AppPurchaseService/
MAIN_CLASS="com.hellobike.platform.aps.deploy.Application"
START_OPTS="$START_OPTS -DAPPID=$APPID"

cd ${PROJECT_DIR}

#Memory configs
MEM_OPTS="-Xms5120m -Xmx5120m -Xmn1706m -XX:MaxMetaspaceSize=512m -XX:MetaspaceSize=512m"

#GC OPTS
GC_OPTS="$GC_OPTS -XX:+UseConcMarkSweepGC 
-XX:+UseParNewGC 
-XX:+UseCMSCompactAtFullCollection 
-XX:CMSFullGCsBeforeCompaction=0 
-XX:CMSInitiatingOccupancyFraction=62 
-XX:CMSTriggerRatio=70"

#GC logging
GC_OPTS="$GC_OPTS -Xloggc:${PROJECT_LOG}/logs/gc.log"
GC_OPTS="$GC_OPTS -XX:+PrintGCDateStamps -XX:+PrintGCDetails"
GC_OPTS="$GC_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${PROJECT_LOG}/logs/heapdump.hprof"

# JMX OPTS
JMX_OPTS="$JMX_OPTS -Dcom.sun.management.jmxremote.port=15005 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote=true 
-Dowl.metrics.kafka.servers=owl.kafka1.ttbike.com.cn:9092,owl.kafka2.ttbike.com.cn:9092,owl.kafka3.ttbike.com.cn:9092"


START_OPTS="$START_OPTS -Djava.io.tmpdir=$PROJECT_DIR/temp/"
START_OPTS="$START_OPTS -Duser.dir=$PROJECT_DIR"

CLASS_PATH="$PROJECT_DIR/conf:$PROJECT_DIR/lib/*:$CLASS_PATH"


# get pid
getPid(){
    if [ -z $1 ]
    then
        echo "Usage: $0 process-pattern" >&2
        exit 1
    fi

    exc_pids="^$$$"
    curr_pid=$$
    while [ $curr_pid -gt 0 ]
    do
        curr_pid=`ps -fwwp $curr_pid|grep -v PPID|awk '{print $3}'`
        exc_pids="$exc_pids|^$curr_pid$"
    done
    curr_script=$0
    curr_script=${curr_script#.}
    curr_script=${curr_script//./\.}

    if [ $# -eq 1 ]
    then
        ps -efww|grep "$1"|grep '-DAPPID='|grep -Ev "grep|$curr_script"|awk '{print $2}'|grep -Ev $exc_pids
    else
        firstArg=$1
        shift
        ps -efww|grep "$firstArg "|grep "$*"|grep '-DAPPID='|grep -Ev "grep|$curr_script"|awk '{print $2}'|grep -Ev $exc_pids
    fi
}

#return value
retval=0
getNameFromPid(){
   nowTime1=$(date)
   tips="冲突时间"
   printf "冲突进程信息请查看:/tmp/startCrash.log
"

   echo $tips$nowTime1 >> /tmp/startCrash.log
   echo "冲突进程数量:" $# >> /tmp/startCrash.log

   for loop in $*
   do
       ps -ef|grep $loop|grep -v grep >> /tmp/startCrash.log
   done
}
# start the server
start(){
    printf 'Starting the server
'
    pids=`getPid $APPID`
    if ! [ -z "$pids" ];then
        printf 'Existing process: %d
' "$pids"
        getNameFromPid $pids
        retval=1
    else
        #start
        mkdir -p "$PROJECT_DIR/temp/"
        mkdir -p "$PROJECT_DIR/logs/"
        #echo "MEM_OPTS: $MEM_OPTS"
        #echo "GC_OPTS: $GC_OPTS"
        #echo "JMX_OPTS: $JMX_OPTS"
        #echo "START_OPTS: $START_OPTS"
         chown -R deploy.deploy $PROJECT_LOG/
         chown -R deploy.deploy $PROJECT_DIR/
         chown -R deploy.deploy $PROJECT_LOG/logs/
        JAVA_CMD="nohup java -server $MEM_OPTS $GC_OPTS $JMX_OPTS $START_OPTS -Denv=pro -DAPPID=AppPurchaseService -Dfile.encoding=UTF-8 -classpath $CLASS_PATH $MAIN_CLASS $PROJECT_DIR/conf/Configure.json > $PROJECT_LOG/logs/jvm_std.log 2>&1 &"
        echo $JAVA_CMD
        if ! [ `whoami` = "deploy" ];then
          /bin/su $USER -c "mkdir -p $PROJECT_DIR/temp/"
          /bin/su $USER -c "$JAVA_CMD"
        else
          mkdir -p $PROJECT_DIR"/temp/"
          /bin/bash -c "$JAVA_CMD"
        fi
        echo "Process pid: `getPid $APPID`"
        sleep 3
        if [ -z `getPid $APPID` ]
        then
            echo "Failed to start the server"
            retval=1
        else
            echo "Finish $0"
            retval=0
        fi
    fi
}

# stop the server
stop(){
    printf 'Stopping the server
'
    pids=`getPid $APPID`
    if [ -z "$pids" ]
    then
        printf 'process is not running
'
        retval=0
    else
        #stop
        max_loop=10
        for ((i=0; i<$max_loop; i++))
        do
            pids=`getPid $APPID`
            if [ -z "$pids" ]
            then
                break;
            fi

            if [ $i -gt 5 ]
            then
                _9="-9"
            fi

            for pid in $pids
            do
                echo "Kill process with pid:$pid and pattern:$MAIN_CLASS"
                if ! kill $_9 $pid
                then
                    echo "Failed kill process with pid:$pid and pattern:$MAIN_CLASS"
                else
                    echo "Succeed kill process with pid:$pid and pattern:$MAIN_CLASS"
                fi
            done

            sleep 3
        done

        if [ $i -eq $max_loop ]
        then
            echo_t "Failed kill the processes $pids after try $max_loop times"
            retval=1
        else
            retval=0
        fi
    fi
}

# status for server
status(){
    pids=`getPid $APPID`
    if ! [ -z "$pids" ];then
        printf 'server is running: %d
' "$pids"
    else
        printf 'server is stopped
'
    fi
}

user_exists(){
        if id -u $1 >/dev/null 2>&1; then
        echo "1"
        else
                echo "0"
        fi
}

# dispatch the command
case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    status)
    status
    ;;
    restart)
    stop
    start
    ;;
    *)
    printf 'Usage: %s {start|stop|restart|status}
'
    exit 1
    ;;
esac


# exit
exit "$retval"



# END OF FILE
原文地址:https://www.cnblogs.com/hhhshct/p/12407660.html