#!/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