适用于Spring Boot Jar的启停部署脚本
shell脚本参数
使用-z或-n对一个变量判空时, 若直接使用[ -n ARG ]
这种形式,当{ARG}
中有空格将会报错,
line 27: [: sd: binary operator expected
需要使用
[[ -n ${ARG} ]] 或 [ -n "${ARG}" ]
完整脚本
# Please define the absolute path of tomcat instance
JAVA_HOME=/opt/jdk/latest
BASE_DIR=/home/tomcat
JAVA_OPTS="-server -Xms512m -Xmx512m -XX:MaxNewSize=256m -Djava.awt.headless=true"
EXTRA_OPTS=""
TC_ERROR=0
start() {
echo -n "[$(date +%Y%m%d-%H%M%S)] Start: "
pid=`ps -ef|grep $1|grep -v 'grep'|grep 'java'|awk '{print $2}'`
if [ -z ${pid} ] ; then
if [ ! -e ${JAVA_HOME}/bin/java ]; then
echo ${JAVA_HOME} ' is not a valid JAVA_HOME path'
exit 2
fi
echo JAVA_HOME:${JAVA_HOME}, JAR:$1, port:$2
nohup ${JAVA_HOME}/bin/java ${JAVA_OPTS} -jar $1 --server.port=$2 ${EXTRA_OPTS} >/dev/null 2>&1 &
else
echo $1' is running at pid: '${pid}
fi
}
stop() {
echo -n "[$(date +%Y%m%d-%H%M%S)] Stop: "
pid=`ps -ef|grep $1|grep -v 'grep'|grep 'java'|awk '{print $2}'`
if [ -z $pid ] ; then
echo $1' is not running'
else
echo $1' is running at pid:'${pid}
kill $pid
sleep 5
fi
pid=`ps -ef|grep $1|grep -v 'grep'|grep 'java'|awk '{print $2}'`
if [ -z $pid ] ; then
echo 'Done'
else
echo 'Still running, now killing with pid:'${pid}
ps -ef|grep $1|grep -v 'grep'|grep 'java'|awk '{print $2}'|xargs kill -s 9
fi
}
restart() {
stop $1
start $1 $2
}
deploy() {
# -f filename - Check for regular file existence not a directory
[ -f ${BUILD_DIR}/$JAR_FILE ] || exit 1
stop $1
df -h
echo ''
echo -n "[$(date +%Y%m%d-%H%M%S)] Deploy: "
if [ -e $1 ]; then
echo -n "remove $1... "
rm $1
fi
echo -n "copy... "
cp -f ${BUILD_DIR}/$JAR_FILE ${RUN_DIR}/$JAR_FILE
echo 'done'
start $1 $2
}
help_func() {
echo "Usage:"
echo " $0 [-d BASE_DIR] [-j JAVA_HOME] [-f JAR_FILE] [-p PORT] [-m ACT_MODE] [-v VM_OPTION]"
echo "Description:"
echo "-d Path of the workspace, optional, default: $BASE_DIR"
echo "-f The jar file name, e.g. my-project.jar"
echo "-j Path to JDK home, optional, default: $JAVA_HOME"
echo "-m Action mode, e.g. start, restart, stop, etc."
echo "-p Service port, e.g. 8080"
echo "-e extra jar arguments, e.g. --asp.root_path=/path"
echo "-v JAVA_OPTS, optional, default: $JAVA_OPTS"
echo ""
echo "Examples:"
echo " $0 -f asp-commons.jar -p 8761 -m restart"
exit 0
}
# 如果字符后面没有冒号, 说明该字符的选项不需要值, 如 -i
# 如果字符后面跟着一个冒号, 表明该字符的选项需要一个值, 其参数和值之间需要空格分隔, 如 -j aaa.jar, 冒号和问号不能被用作选项字符
# getopts每次被调用时, 会将下一个选项字符放置到变量中, 通过OPTARG可以取到参数值
# 如果option前面加冒号, 代表忽略错误
while getopts 'd:e:j:f:m:p:v:h' OPT; do
case $OPT in
d) BASE_DIR="$OPTARG";;
f) JAR_FILE="$OPTARG";;
j) JAVA_HOME="$OPTARG";;
m) ACT_MODE="$OPTARG";;
p) PORT="$OPTARG";;
v) JAVA_OPTS="$OPTARG";;
e) EXTRA_OPTS="$OPTARG";;
h) help_func $0;;
?) help_func $0;;
esac
done
shift $(($OPTIND - 1))
# Print helpFunction in case parameters are empty
if [ -z "$ACT_MODE" ]
then
echo "Parameter -m is missing";
TC_ERROR=1
fi
if [ -z "$JAR_FILE" ]
then
echo "Parameter -f is missing";
TC_ERROR=1
fi
if [ $TC_ERROR -gt 0 ]
then
help_func
fi
RUN_DIR=${BASE_DIR}/run
BUILD_DIR=${BASE_DIR}/builds
ARCHIVE_DIR=${BASE_DIR}/archives
TMP_DIR=${BASE_DIR}/tmp
# -e Check for file existence regardless of type (node, directory, socket)
#if [ ! -e ${RUN_DIR}/${JAR_FILE} ]; then
# echo ${RUN_DIR}/${JAR_FILE} 'does not exist'
# exit 2
#fi
case "$ACT_MODE" in
start)
# -e Check for file existence regardless of type (node, directory, socket)
if [ ! -e ${RUN_DIR}/${JAR_FILE} ]; then
echo ${RUN_DIR}/${JAR_FILE} 'does not exist'
exit 2
fi
if [ -z "$PORT" ]
then
echo "Parameter -p is missing";
exit 2
fi
start ${RUN_DIR}/${JAR_FILE} $PORT
;;
stop)
stop ${RUN_DIR}/${JAR_FILE}
;;
restart)
restart ${RUN_DIR}/${JAR_FILE} $PORT
;;
deploy)
deploy ${RUN_DIR}/${JAR_FILE} $PORT
;;
*)
echo "Unknown action mode"
help_func
esac
使用方式
指定jvm参数
./scripts/tc2.sh -f ap-program.jar -m deploy -p 8082 -v "-server -Xms512m -Xmx512m -XX:MaxNewSize=256m -Djava.awt.headless=true -Dspringfox.documentation.enabled=true"
指定jar的启动参数, 对于参数值为空的参数, 两个引号需要转义一下
./scripts/tc2.sh -f ap-website2.jar -m restart -p 8090 -e "--ap.root_path=\"\" --ap.resource_path=/static --server.servlet.context-path=/"
适用于Spring Boot Jar的启停部署脚本的更多相关文章
- Spring Boot jar包linux服务器部署
Spring Boot 部署 一.使用命令行java -jar 常驻 nohup java -jar spring-boot-1.0-SNAPSHOT.jar > log.file 2>& ...
- Spring Boot Dubbo 应用启停源码分析
作者:张乎兴 来源:Dubbo官方博客 背景介绍 Dubbo Spring Boot 工程致力于简化 Dubbo | grep tid | grep -v "daemon" tid ...
- 居然仅用浏览器,就完成了Spring Boot应用的开发与部署!
最近有幸试用了一下阿里云的一个新产品:云开发平台,体验一把全新的开发模式!虽然中间也碰到了一些问题,但整体的体验透露着未来感,因为整个过程都不需要使用我们最常用的IDEA,仅依靠浏览器就把一个Spri ...
- 编写Redis启停服务脚本
脚本内容如下; fi esac exit$RETVAL 下载脚本:艺搜下载 将下载下来的脚本放在/etc/init.d/目录下 更改脚本权限 chmod 777 /etc/init.d/red ...
- Redis windows版本的启停bat脚本命令
Reids windows版本安装 redis windows官网推荐:https://github.com/MicrosoftArchive/redis/releases 下载解压即可. 启停bat ...
- Spring Boot Jar包转War包 部署到Tomcat下
原文:https://my.oschina.net/sdlvzg/blog/1562998 我们都知道springBoot中已经内置了tomcat,是不需要我们额外的配置tomcat服务器的,但是有时 ...
- spring boot jar 部署linux服务器
用命令启动spring boot 项目,一旦终端命令窗口关闭,项目也就关闭了,所以我们采用脚本的方式来运行jar 正常命令 java -jar xxx.jar 脚本启动,vim 创建 start.sh ...
- Spring Boot在Docker上的部署
一.准备工作 1.1 安装Docker环境 Docker 给旧版本的WIN系统提供的是Docker Toolbox下载(https://docs.docker.com/toolbox/overview ...
- Spring boot centos7 后台服务安装部署
Spring boot 应用服务安装部署(maven工程) 1.首先在maven工程的pom文件中引入以下标签并保存 <build> <plugins> <plugin& ...
- 关于spring boot jar包与war包的问题
此文为转载:http://mrlee23.iteye.com/blog/2047968 在开发调试完成之后,可以将应用打成JAR包的形式,在Eclipse中可以直接使用Maven插件的package命 ...
随机推荐
- apicloud(沉浸式导航篇) - 手机状态栏 有黑边的解决办法
在 index.html 的 apiready 中加上 第一种 : 可设置全屏 api.setFullScreen({ fullScreen: true }); 第二种:设置状 ...
- [转帖]JVM中年轻代里的对象什么情况下进入老年代?以及老年代垃圾回收算法-标记整理算法
1.躲过15次GC之后进入老年代 系统刚启动时,创建的各种各样的对象,都是分配在年轻代里. 随着慢慢系统跑着跑着,年轻代满了,就会出发Minor GC ,可能1%的少量存活对像转移到空着的Surviv ...
- [转帖]构建 TiFlash 副本
https://docs.pingcap.com/zh/tidb/stable/create-tiflash-replicas#%E6%8C%89%E8%A1%A8%E6%9E%84%E5%BB%BA ...
- [转帖]比快更快的 ELK 8 安装使用指南-Elasticsearch,Kibana,Logstash
https://juejin.cn/post/7133907643386560519 携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情 Elastic 8 ...
- open,os模块的常用函数
一.open用于读写文件 1.open的基本语法 : open(file,mode,buffering,encoding,errors.........),open中有如下几个参数,一般情况 下我们只 ...
- 从好玩到好用:程序员用AI提效的那些事儿
本片内容是[AI思维空间]ChatGPT纵横编程世界,点亮智慧火花的续作,主要记录组内开发小伙伴儿们在开发过程中的实际应用案例,记录典型案例,尽量不要和其他人重复,以解决开发过程中的实际问题为主,设计 ...
- 【JS 逆向百例】网洛者反爬练习平台第六题:JS 加密,环境模拟检测
关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...
- Gin 框架介绍与快速入门
Gin 框架介绍与快速入门 目录 Gin 框架介绍与快速入门 一.Gin框架介绍 1. 快速和轻量级 2. 路由和中间件 3. JSON解析 4. 支持插件 5. Gin相关文档 二.基本使用 1.安 ...
- 升级到win11 22h2的体验
win11 22h2更稳定了 在win11 22h2发布后没多久,我就升级到了这个版本,截止目前已经使用半个月了,谈谈我的使用感受. 总体要比之前的版本更稳定,表现为笔记本风扇不会突然响,突然卡顿,不 ...
- TienChin-课程管理-课程导出
更改 Course.java: /** * 课程ID */ @TableId(value = "course_id", type = IdType.AUTO) @NotNull(m ...