Skip to content

Commit 5f5cf28

Browse files
committed
✨ 添加启动脚本
1 parent 5889dff commit 5f5cf28

4 files changed

Lines changed: 358 additions & 0 deletions

File tree

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#################################################################################
2+
# 嵌入式 Tomcat 应用启动脚本
3+
#################################################################################
4+
5+
# 删除旧日志文件
6+
removeOldLog() {
7+
mkdir -p /home/zp/log/startup
8+
if [ -f $LOG_FILE ];then
9+
rm -rf $LOG_FILE
10+
fi
11+
}
12+
13+
# 检查脚本参数,如必要参数未传入,退出脚本。
14+
checkInput() {
15+
if [ "${app}" == "" ] || [ "${oper}" == "" ] || [ "${javaArgs}" == "" ] || [ "${classpathArgs}" == "" ] || [ "${bootstrapClass}" == "" ]; then
16+
echo "请输入脚本参数:app oper javaArgs classpathArgs bootstrapClass"
17+
echo " app: 应用名。"
18+
echo " oper: 运行环境(必填)。可选值:start|stop|restart"
19+
echo " javaArgs: JVM 参数(必填)。"
20+
echo " classpathArgs: classpath参数(必填)。"
21+
echo " bootstrapClass: 启动类(必填)。"
22+
exit 0
23+
fi
24+
}
25+
26+
# 检查服务是否已经启动
27+
PIDS=""
28+
checkStarted() {
29+
PIDS=`ps -ef | grep java | grep ${app} | awk '{print $2}'`
30+
if [ -n "$PIDS" ]; then
31+
return 0
32+
else
33+
return 1
34+
fi
35+
}
36+
37+
execOper() {
38+
case "${oper}" in
39+
start)
40+
echo -n "starting server: "
41+
#检查服务是否已经启动
42+
if checkStarted ;then
43+
echo "ERROR: server already started!"
44+
echo "PID: $PIDS"
45+
exit 1
46+
fi
47+
48+
args="${javaArgs} -classpath ${classpathArgs} ${bootstrapClass}"
49+
#echo -e "启动参数:\n${args}"
50+
51+
#启动服务
52+
nohup java ${args} > ${LOG_FILE} 2>&1 &
53+
# echo -e "执行参数:\n${args}"
54+
echo -e "\nthe server is started..."
55+
;;
56+
stop)
57+
echo -n "stopping server: "
58+
#dubbo提供优雅停机, 不能使用kill -9
59+
if checkStarted ;then
60+
kill $PIDS
61+
echo -e "\nthe server is stopped..."
62+
else
63+
echo -e "\nno server to be stopped..."
64+
fi
65+
;;
66+
restart)
67+
$0 ${app} stop "${javaArgs}" "${classpathArgs}" "${bootstrapClass}"
68+
sleep 5
69+
$0 ${app} start "${javaArgs}" "${classpathArgs}" "${bootstrapClass}"
70+
;;
71+
*)
72+
echo "Invalid oper: ${oper}."
73+
exit 1
74+
esac
75+
}
76+
77+
######################################## MAIN ########################################
78+
# 获取输入参数
79+
app=`echo $1`
80+
oper=`echo $2`
81+
javaArgs=`echo $3`
82+
classpathArgs=`echo $4`
83+
bootstrapClass=`echo $5`
84+
vars=$*
85+
checkInput
86+
87+
LOG_FILE=/home/zp/log/startup/${app}-startup.log
88+
removeOldLog
89+
90+
execOper

scripts/git-clone.sh

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#!/bin/bash
2+
3+
#
4+
# 检查脚本参数,如必要参数未传入,退出脚本。
5+
#
6+
checkInput() {
7+
if [ "${repository}" == "" ] || [ "${branch}" == "" ]; then
8+
echo "请输入脚本参数:repository branch [source] [target]"
9+
echo " repository: git 仓储(必填)。"
10+
echo " branch: git 分支(必填)。如 master/develop"
11+
echo " source: 代码存放目录。默认为/home/zp/source。"
12+
echo " target: 代码存放目录。默认为脚本所在目录。"
13+
exit 0
14+
fi
15+
}
16+
17+
#
18+
# 判断 git 版本库是否存在。根据实际结果修改 ${gitok} 值。
19+
#
20+
gitok=false
21+
isGitExist() {
22+
cd ${SOURCE_PATH}
23+
if [ -d "${SOURCE_PATH}/${repository}/${target}" ]; then
24+
cd ${SOURCE_PATH}/${repository}/${target}
25+
#(1)删除git状态零时文件
26+
if [ -f "gitstatus.tmp" ]; then
27+
rm -rf gitstatus.tmp
28+
fi
29+
30+
#(2) 判断是否存在.git目录
31+
if [ -d "./.git" ]; then
32+
#(3) 判断git是否可用
33+
git status &> gitstatus.tmp
34+
grep -iwq 'not a git repository' gitstatus.tmp && gitok=false || gitok=true
35+
fi
36+
37+
#返回到主目录
38+
cd ${SOURCE_PATH}
39+
fi
40+
}
41+
42+
#
43+
# 如果 git 版本库存在(根据 ${gitok} 值),执行 fetch 操作;反之,执行 clone 操作。
44+
#
45+
doFetchOrClone() {
46+
if [ ! -d "${SOURCE_PATH}" ]; then
47+
mkdir -p ${SOURCE_PATH}
48+
fi
49+
if ${gitok}; then
50+
cd ${SOURCE_PATH}/${repository}/${target}
51+
git reset --hard
52+
git clean -ffdx
53+
git fetch
54+
echo "git fetch ${repository} remote repository 到本地成功"
55+
else
56+
#删除所有内容,便于重新进行git clone
57+
rm -rf ${repository}
58+
git clone --no-checkout git@github.com:${ACCOUNT}/${repository}.git ${SOURCE_PATH}/${repository}/${target}
59+
echo "git clone ${repository} remote repository 到本地成功"
60+
cd ${SOURCE_PATH}/${repository}/${target}
61+
fi
62+
}
63+
64+
#
65+
# 切换到 ${branch} 分支
66+
#
67+
doCheckout() {
68+
echo "检出 ${repository} ${branch} 分支代码"
69+
isRemoteBranch=false
70+
gitRemoteBranch=`git branch -r`
71+
echo -e "$gitRemoteBranch" | grep -iwq ${branch} && isRemoteBranch=true || isRemoteBranch=false
72+
if ${isRemoteBranch}; then
73+
echo "找到 ${branch} 对应的远端分支"
74+
git checkout -f 'origin/'${branch}
75+
else
76+
git checkout -f ${branch}
77+
fi
78+
echo "更新子模块代码"
79+
git submodule update --init --recursive --force
80+
}
81+
82+
##############################__MAIN__########################################
83+
export LANG="zh_CN.UTF-8"
84+
ACCOUNT=dunwu
85+
SOURCE_PATH=/home/zp/source
86+
87+
# 必填输入参数
88+
repository=`echo $1`
89+
branch=`echo $2`
90+
91+
# 可选输入参数
92+
source=`echo $3`
93+
target=`echo $4`
94+
if [ "${source}" != "" ]; then
95+
SOURCE_PATH=${source}
96+
fi
97+
98+
# 0. 检查传入的参数
99+
checkInput
100+
101+
# 1. 判断本地是否已存在 Git 仓库
102+
isGitExist
103+
104+
# 2. 如果本地已有代码,执行 fetch;反之,从远程 clone
105+
doFetchOrClone
106+
107+
# 3. 切换到指定分支
108+
doCheckout
109+
110+
echo "代码检出完成!"

scripts/javatool-server-release.sh

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
#################################################################################
2+
# javatool-server 发布脚本
3+
#################################################################################
4+
5+
#
6+
# 检查脚本参数,如必要参数未传入,退出脚本。
7+
#
8+
checkInput() {
9+
if [ "${branch}" == "" ] || [ "${profile}" == "" ]; then
10+
echo "请输入脚本参数:branch profile"
11+
echo " branch: git分支(必填)。如 develop, master"
12+
echo " profile: 运行环境(必填)。可选值:development/test"
13+
echo "例:./javatool-server-release.sh master test"
14+
exit 0
15+
fi
16+
}
17+
18+
#
19+
# 检查文件是否存在,不存在则退出脚本
20+
#
21+
checkFileExist() {
22+
if [ ! -f "$1" ]
23+
then
24+
echo "关键文件 $1 找不到,脚本执行结束"
25+
exit 0
26+
fi
27+
}
28+
29+
#
30+
# 记录发布的版本信息
31+
#
32+
saveVersionInfo() {
33+
VERSION_LOG_PATH=/home/zp/log/deploy/version.txt
34+
if [ ! -f ${VERSION_LOG_PATH} ]; then
35+
mkdir -p /home/zp/log/deploy
36+
touch ${VERSION_LOG_PATH}
37+
fi
38+
chmod 777 ${VERSION_LOG_PATH}
39+
sed -i '/'XYZ'/,+3d' ${VERSION_LOG_PATH}
40+
echo "============ zp javatool-server info ===========" >> ${VERSION_LOG_PATH}
41+
cd ${SOURCE_PATH}
42+
echo "Branch is: ${branch}..." >> ${VERSION_LOG_PATH}
43+
echo "Profile is: ${profile}..." >> ${VERSION_LOG_PATH}
44+
echo "CommitID is : $(git log --pretty=oneline -1)..." >> ${VERSION_LOG_PATH}
45+
}
46+
47+
######################################## MAIN ########################################
48+
export LANG="zh_CN.UTF-8"
49+
50+
# 设置全局常量
51+
SOURCE_PATH=/home/zp/source/java-stack
52+
SCRIPT_PATH=/home/zp/source/java-stack/scripts
53+
54+
# 分配 script 和 config 目录的权限
55+
chmod -R 755 /home/zp/source/java-stack
56+
57+
# 0. 获取传入参数并检查
58+
branch=`echo $1`
59+
profile=`echo $2`
60+
repository=`echo $3`
61+
checkInput
62+
63+
# 1. 停止应用
64+
checkFileExist "${SCRIPT_PATH}/javatool-server-run.sh"
65+
echo "停止所有 javatool-server 应用开始"
66+
${SCRIPT_PATH}/javatool-server-run.sh ${profile} stop
67+
echo "停止所有 javatool-server 应用结束"
68+
69+
# 2. 更新代码
70+
cd ${SOURCE_PATH}
71+
UPDATE_CODE_SCRIPT_PATH=/home/zp/script/common/git-clone.sh
72+
checkFileExist ${UPDATE_CODE_SCRIPT_PATH}
73+
${UPDATE_CODE_SCRIPT_PATH} dunwu javatool-server ${branch}
74+
chmod -R 777 ${SOURCE_PATH}
75+
76+
# 3. 替换配置
77+
#${SCRIPT_PATH}/javatool-server-replace-config.sh ${SOURCE_PATH} ${profile}
78+
79+
# 4. 编译打包
80+
cd ${SOURCE_PATH}/codes/javatool
81+
mvn clean package -Dmaven.test.skip=true
82+
83+
# 5. 启动应用
84+
checkFileExist "${SCRIPT_PATH}/javatool-server-run.sh"
85+
echo "启动所有 javatool-server 应用开始"
86+
# 手动释放内存
87+
echo 3 > /proc/sys/vm/drop_caches
88+
${SCRIPT_PATH}/javatool-server-run.sh ${profile} start
89+
echo "启动所有 javatool-server 应用结束"
90+
91+
## 6. 记录发布的版本信息
92+
saveVersionInfo

scripts/javatool-server-run.sh

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#################################################################################
2+
# 渠道 athena 启动脚本
3+
#################################################################################
4+
5+
# 检查脚本参数,如必要参数未传入,退出脚本。
6+
checkInput() {
7+
if [ "${profile}" == "" ] || [ "${oper}" == "" ]; then
8+
echo "请输入脚本参数:profile oper [debug]"
9+
echo " profile: 运行环境(必填)。可选值:development|test"
10+
echo " oper: 运行环境(必填)。可选值:start|stop|restart"
11+
echo " debug: debug启动开关。默认不填为不启动。"
12+
exit 0
13+
fi
14+
}
15+
16+
#检查文件是否存在,不存在则退出脚本
17+
checkFileExist() {
18+
if [ ! -f "$1" ]
19+
then
20+
echo "关键文件 $1 找不到,脚本执行结束"
21+
exit 0
22+
fi
23+
}
24+
25+
# 封装启动参数,调用启动脚本
26+
execBootScript(){
27+
APP_NAME=javatool-server
28+
29+
# JVM 参数
30+
# JAVA_OPTS=" -Ddubbo.resolve.file=${RESOURCES_PATH}/dubbo/dubbo-resolve.properties -Djava.awt.headless=true -Dfile.encoding=UTF8 -Djava.net.preferIPv4Stack=true -Ddubbo.shutdown.hook=true -Dspring.profiles.active=${profile} -Djava.security.egd=file:/dev/./urandom -Xms1024m -Xmx1024m -Xss2m "
31+
JAVA_OPTS=" -Djava.awt.headless=true -Dfile.encoding=UTF8 -Djava.net.preferIPv4Stack=true -Ddubbo.shutdown.hook=true -Dspring.profiles.active=${profile} -Xms1024m -Xmx1024m -Xss2m "
32+
JAVA_DEBUG_OPTS=""
33+
if [ "$3" == "debug" ]; then
34+
JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=2235,server=y,suspend=n "
35+
shift
36+
fi
37+
javaArgs=" ${JAVA_OPTS} ${JAVA_DEBUG_OPTS} "
38+
39+
# classpath 参数
40+
classpathArgs="${COMPILED_WEBAPP}/WEB-INF/classes:${COMPILED_WEBAPP}/WEB-INF/lib/*"
41+
42+
# 启动类
43+
bootstrapClass="io.github.dunwu.javatool.server.TomcatServer"
44+
45+
${BOOT_SCRIPT} ${APP_NAME} ${oper} "${javaArgs}" "${classpathArgs}" "${bootstrapClass}"
46+
}
47+
48+
######################################## MAIN ########################################
49+
# 获取输入参数
50+
profile=$1
51+
oper=$2
52+
debug=$3
53+
checkInput
54+
55+
# 设置环境变量
56+
export LANG="zh_CN.UTF-8"
57+
#export JAVA_HOME=/opt/software/java/jdk1.8.0_121
58+
#export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
59+
#export MAVEN_HOME=/opt/software/maven/apache-maven-3.0.5
60+
#export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$MAVEN_HOME/bin:$PATH
61+
62+
# 关键路径
63+
BOOT_SCRIPT=./embed-tomcat-server-boot.sh
64+
COMPILED_WEBAPP=/home/zp/source/java-stack/codes/javatool/server/target/javatool-server
65+
RESOURCES_PATH=/home/zp/source/union/modules/athena/src/main/resources
66+
execBootScript

0 commit comments

Comments
 (0)