#!/bin/bash
CURRENTPATH=`cd \`dirname $0\`\/..; pwd`
#需注意如项目根目录下包含多个.jar文件则不可用
cd $CURRENTPATH
JARFILE=$(ls -l |grep .jar$ | awk '{print$9}')
FILEPATH=$CURRENTPATH"/"$JARFILE
# 堆内存设置
JAVA_OPTS="-Xms2g -Xmx2g"
#NewRatio young与old比例, SurvivorRatio eden与survivor比例
JAVA_OPTS="$JAVA_OPTS -XX:NewRatio=4 -XX:SurvivorRatio=4 "
#如若持久代空间不足,可指定
#JAVA_OPTS="$JAVA_OPTS -XX:MaxPermSize=128m"
#jdk8元数据空间代替永久代,默认20m左右,如若达到触发FullGC,因此如class过大可设置
#JAVA_OPTS="$JAVA_OPTS -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m "
# GC 信息打印
#JAVA_OPTS="$JAVA_OPTS -Xloggc:./logs/gc/gc_%p.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"
#JVM发生OOM时,DUMP文件
#JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./logs/gc/heap_%p.hprof"
#JAVA_OPTS="${JAVA_OPTS} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
# 使用说明
help() {
echo "help: start.sh start|stop|restart|exist"
}
start() {
#输出项目进程的pid
PID=$(ps -ef|grep "$FILEPATH" | grep -v grep |awk '{printf $2}')
if [ ! -n "$PID" ]; then
echo "pid is null"
nohup java $JAVA_OPTS -jar $FILEPATH > /dev/null 2>&1 &
echo $JARFILE is started
else
echo "project is running,pid is "${PID}
fi
}
stop() {
PID=$(ps -ef|grep "$FILEPATH" | grep -v grep |awk '{printf $2}')
if [ ! -n "$PID" ]; then
echo $JARFILE is already stopped
else
kill -9 $PID
echo $JARFILE is stopped
fi
}
restart() {
echo stopping $JARFILE
stop
echo start $JARFILE
start
}
exist() {
PID=$(ps -ef|grep "$FILEPATH" | grep -v grep |awk '{printf $2}')
if [ ! -n "$PID" ]; then
echo $JARFILE is stopped
else
echo $JARFILE is running, PID is $PID
fi
}
case $1 in
'start')
start
;;
'stop')
stop
;;
'restart')
restart
;;
'exist')
exist
;;
*)
help
;;
esac
上述只是一个简单的demo,尚未完善,建议可参考rocketmq的启动脚本编写自己服务的启动脚本