前言:我们在linux机器部署微服务时很少通过java -jar的方式取启动一个服务,大多数都是流水线自动启停,所以微服务的脚本就很重要。因此我们来看一下一个常见的启动脚本都包含哪些内容。
1.脚本内容
ADATE=`date +%Y%m%d%H%M%S`
APP_NAME=$1
JAR_NAME=$2
ARGS=$3
APP_HOME=/data/app/$1
if [ ! -d "$APP_HOME/logs" ];then
mkdir $APP_HOME/logs
fi
cd $APP_HOME
LOG_PATH=$APP_HOME/logs/root.log
GC_LOG_PATH=$APP_HOME/logs/gc-$APP_NAME-$ADATE.log
JVM_OPTS="-Dname=$APP_NAME $ARGS -Xms384M -Xmx384M -XX:PermSize=128M -XX:MaxPermSize=128M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -Xloggc:$GC_LOG_PATH -XX:+PrintGCDetails"
pwd
echo $LOG_PATH
JAR_FILE=$APP_HOME/$JAR_NAME
pid=0
start(){
checkpid
if [ ! -n "$pid" ]; then
nohup java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5006 $JVM_OPTS $JAR_FILE --spring.profiles.active=dev > $LOG_PATH 2>&1 &
echo "---------------------------------"
echo "启动完成,按CTRL+C退出日志界面即退出>>>>>"
echo "---------------------------------"
sleep 2s
else
echo "$APP_NAME is runing PID: $pid"
fi
}
status(){
checkpid
if [ ! -n "$pid" ]; then
echo "$APP_NAME not runing"
else
echo "$APP_NAME runing PID: $pid"
fi
}
checkpid(){
pid=`ps -ef |grep $JAR_FILE |grep -v grep |awk '{print $2}'`
}
stop(){
checkpid
if [ ! -n "$pid" ]; then
echo "$APP_NAME not runing"
else
echo "$APP_NAME stop..."
kill -9 $pid
fi
}
restart(){
stop
sleep 1s
start
}
restart
2.脚本解释
2.1启动脚本传参
参数解释:
APP_NAME=$1
JAR_NAME=$2
ARGS=$3
APP_HOME=/data/app/$1
说明运行脚本需要接受三个参数。
$1:应用名(app的jar包所在目录名)
$2:app打包后的jar名
$3:jar启动时指定的参数,例如:--spring.profiles.active=dev
2.2路径及启动参数
参数解释:
1.LOG_PATH=$APP_HOME/logs/root.log
$APP_HOME 取值第一部分所以最终 LOG_PATH=/data/app/aaService/logs/root.log(假设服务应用名aaService)
2.GC_LOG_PATH=$APP_HOME/logs/gc-$APP_NAME-$ADATE.log
同理,GC_LOG_PATH=/data/app/aaService/logs/gc-aaService-$ADATE.log(假设服务应用名aaService,$ADATE去当前系统时间)
3.JVM_OPTS:启动参数
2.3启动
nohup java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5006 --spring.profiles.active=dev
这条命令拆开看
1.-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5006
远程debug断点:可以在idea上远程debug服务器上的程序
2.--spring.profiles.active=dev
指定运行后使用什么后缀的配置文件,也可以理解命名空间
3.java -jar $JVM_OPTS $JAR_FILE
$JVM_OPTS:jar包启动的系统参数
$JAR_FILE:指定jar包所在的路径