#!/bin/sh
#注意事项
#svn
#svn help查看svn帮助
#1.svn代码检出
# svn co http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名 --password 密码
# svn co svn://路径(目录或文件的全路径) [本地目录全路径] --username 用户名 --password 密码
# svn checkout http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名
# svn checkout svn://路径(目录或文件的全路径) [本地目录全路径] --username 用户名
#常量
set -e
# 基础
# export JAVA_HOME=/work/programs/jdk/jdk1.8.0_181
# export PATH=PATH=$PATH:$JAVA_HOME/bin
# export CLASSPATH=$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
DATE=$(date +%Y%m%d%H%M)
# 脚本所在目录
BASE_PATH=$(pwd)
# 服务名称。同时约定部署服务的 jar 包名字也为它。
SERVER_NAME=case-server
# 环境
PROFILES_ACTIVE=dev
# JVM 参数
JAVA_OPS="-Xms512m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError"
# JavaAgent 参数。可用于配置 SkyWalking 等链路追踪
JAVA_AGENT=
# 停止 将原 jar 包对应的 Java 进程,进行优雅关闭
function stop() {
echo "[stop] 开始停止 $BASE_PATH/$SERVER_NAME"
PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')
# 如果 Java 服务启动中,则进行关闭
if [ -n "$PID" ]; then
# 正常关闭
echo "[stop] $BASE_PATH/$SERVER_NAME 运行中,开始 kill [$PID]"
kill -15 $PID
# 等待最大 60 秒,直到关闭完成。
for ((i = 0; i < 60; i++))
do
sleep 1
PID=$(ps -ef | grep $BASE_PATH/$SERVER_NAME | grep -v "grep" | awk '{print $2}')
if [ -n "$PID" ]; then
echo -e ".\c"
else
echo '[stop] 停止 $BASE_PATH/$SERVER_NAME 成功'
break
fi
done
# 如果正常关闭失败,那么进行强制 kill -9 进行关闭
if [ -n "$PID" ]; then
echo "[stop] $BASE_PATH/$SERVER_NAME 失败,强制 kill -9 $PID"
kill -9 $PID
fi
# 如果 Java 服务未启动,则无需关闭
else
echo "[stop] $BASE_PATH/$SERVER_NAME 未启动,无需停止"
fi
}
# 启动 使用新的 jar 包,启动 Java 服务
function start() {
cd $BASE_PATH
# 开启启动前,打印启动参数
echo "[start] 开始启动 $BASE_PATH/$SERVER_NAME"
echo "[start] JAVA_OPS: $JAVA_OPS"
echo "[start] JAVA_AGENT: $JAVA_AGENT"
# 开始启动
nohup java -server $JAVA_OPS $JAVA_AGENT -jar $BASE_PATH/$SERVER_NAME.jar --spring.profiles.active=$PROFILES_ACTIVE /dev/null 2>&1 &
echo "[start] 启动 $BASE_PATH/$SERVER_NAME 完成"
cd $BASE_PATH
}
# 部署
function deploy() {
stop
# 启动 Java 服务
start
}
#deploy
执行方式
#启动
source xx.sh start
或
source xx.sh
#启动
start
#停止
stop