linux下通用的java程序启动关闭重启脚本

纯手写,只需要修改一些配置变量,就可以用来做起动脚本了。

并且除了能起动、还支持关闭、重启、查看是否正在运行的功能。

给大家演示一下效果:


linux下通用的java程序启动关闭重启脚本_第1张图片
 

 

 

#!/bin/bash
# MAINTAINER gaoyaohua "[email protected]" www.updn.cn 
# tingyun service

APPNAME=dc-backend-server
CONF=spring-config-server.xml
APPDIR=$(dirname $(cd `dirname $0`; pwd))
TINGYUNDIR=$(dirname ${APPDIR})
JAVA_HOME=${TINGYUNDIR}/java
LIB=${APPDIR}/target/lib
CLASSPATH=${APPDIR}/target/conf
PROPS_FILE=${APPDIR}/conf/conf-deploy.properties
PROPS_ENCODING=UTF-8
LOGDIR=${APPDIR}/logs
APPPID=${APPDIR}/run/${APPNAME}.pid
LOCKFILE=${APPDIR}/lock/$APPNAME
SHUTDOWN_WAIT=1

# java options
JAVA_OPTS="-Xmx2048M -Xms512M -Xmn256M -XX:SurvivorRatio=1 -Xss256k -XX:PermSize=32M -XX:MaxPermSize=72M -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram  -verbose:gc -XX:+PrintGCDetails  -XX:+PrintGCTimeStamps  -XX:-HeapDumpOnOutOfMemoryError -Xloggc:"$LOGDIR"/$APPNAME-gc.log -XX:HeapDumpPath="$LOGDIR"/$APPNAME-dump"

# jmxremote options 默认注释为关掉
#JMX_OPTS=-Dcom.sun.management.jmxremote.port=10004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

# enter main class start
ENTER="com.networkbench.newlens.datacollector.Bootstrap"


if [ -d "$LIB" ]; then
    for i in "$LIB"/*.jar; do
      CLASSPATH="$CLASSPATH":"$i"
    done
fi


start() {
	kpid="`ps x | grep "DappName=$APPNAME" | grep -v grep | awk '{print $1}'`"
	if [ -n "$kpid" ] && [ -f $LOCKFILE ] && [ -f $APPPID ];then
		read kpid < $APPPID
		echo -e "$APPNAME is \033[32m running \033[0m"
		return 0
	fi

	echo -n "$APPNAME start  " && echo -ne "\033[s ."
	nohup $JAVA_HOME/bin/java -DappName="$APPNAME" $JAVA_OPTS -Dtingyunpath="$APPDIR" -Dsharedpath="$TINGYUNDIR/shared" -Dwork.dir="$APPDIR" -Dconf=$CONF -Dprops=$PROPS_FILE -DpropsEncoding=$PROPS_ENCODING -Dnohup=true -Dpid=$$ -Dpid.file=$APPPID -DdiagnoseOnSignal=ALRM  $JMX_OPTS -cp $CLASSPATH  $ENTER >> "$LOGDIR"/nohup_"$APPNAME" 2>&1 &
	RETVAL=$? && [ $RETVAL = 0 ] && touch $LOCKFILE && echo -e "\033[u\033[K [  \033[32m ok \033[0m  ]"
    	echo `date "+%F %T"` $APPNAME started. >> "$LOGDIR"/$APPNAME-restart.log
    	return $RETVAL
}


stop() {
	kpid="`ps x | grep "DappName=$APPNAME" | grep -v grep | awk '{print $1}'`"
	#if [ ! -n "$kpid" ] && [ ! -f $LOCKFILE ] && [ ! -f $APPID ];then
	if [ ! -n "$kpid" ];then
		echo -e "$APPNAME is \033[31m not running \033[0m"
		return 1
	fi
	count=-1
	if [ -f $LOCKFILE ] && [ -f $APPID ]; then
		read kpid < $APPPID
		echo -n -e "$APPNAME stop   " && echo -n -e "\033[s";
		kill $kpid
            	read kpid < $APPPID
		count=0;
            	let kwait=$SHUTDOWN_WAIT
            	until [ `ps --pid $kpid | grep -c $kpid` = '0' ] || [ $count -gt $kwait ]
            	do
                	echo -n -e ".";
                	sleep 1
                	let count=$count+1;
            	done
	fi
        if [ $count -gt $kwait ] && [ "$count" -eq "-1" ];then
        	echo -e "\033[u\033[K [\033[31m failed \033[0m]"
		return -1
		#kill -9 $kpid
        fi
        if [ $count -le $kwait ]; then
        	echo -e "\033[u\033[K [  \033[32m ok \033[0m  ]"
        fi
    	rm -f $LOCKFILE $APPPID
}

status() {
	kpid="`ps x | grep "DappName=$APPNAME" | grep -v grep | awk '{print $1}'`"
	if [ -n "$kpid" ];then
		if [ -f $LOCKFILE ] && [ -f $APPID ];then
			echo -e "$APPNAME is \033[32m running \033[0m"
		else
			echo -e "$APPNAME is \033[33m running \033[0m but lockfile or pidfile not ready"
		fi
	else
		echo -e "$APPNAME is \033[31m not running \033[0m"
	fi
}

info() {
	echo $APPNAME
}



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
exit 0

 

你可能感兴趣的:(shell)