前言:
最近项目要部署到服务器,发现手敲命令确实太费劲了,所以打算在网上找一个启动jar的脚本,找到太多的版本,用了很多都很不好用,最终还得是自己找个较为好点的来改装一下,直接上命令操作步骤。
1、在心仪的目录中,创建一个sh文件,比如我希望启动的jar的端口号为:8080(注意:需要先查看对应的端口是否被占用),那么我就起一个名字为app-8080.sh的文件
touch app-8080.sh
2、创建后,需要给这个文件授权哟,不然你也用不了的哈
chmod 777 app-8080.sh
3、编辑该文件,可以使用vi/vim,然后点击i,切换到编辑模式
vi app-8080.sh
4、把sh的内容给复制进去
重点!!!重点!!!重点!!!需要修改的地方就三个
一、JAR_NAME=jar名字(xxx.jar)
二、JAR_PATH=jar路径(/home/project/)
三、PROT=端口号(8080)
#!/bin/bash
#您的jar包,需要包含后缀,例如:xxx.jar
JAR_NAME=xxx.jar
#您的jar包所在目录,例如:/home/projects/
JAR_PATH=/xxx/xxx/
#您所希望jar启动的端口号,设置前请先查询是否已经被占用的情况
PORT=8080
# 设置日志输出文件信息
dat1=$(date +%Y-%m-%d-%H-%M)
cd `dirname $0`
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist(){
pid=`ps -ef|grep -E ''$JAR_NAME'.'$PORT'|'$PORT'.*'$JAR_NAME''|grep -v grep|awk '{print $2}'`
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#启动方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${JAR_NAME} is already running. pid=${pid} ."
else
nohup java -Xms256m -Xmx524m -Dfastjson.parser.safeMode=true -Dfile.encoding=UTF-8 -Dserver.port=${PORT} -jar ${JAR_PATH}${JAR_NAME} > ${JAR_PATH}${dat1}.log 2>&1 &
echo "${JAR_NAME} is start success"
#tail -f fileserver-web.out
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
echo "${JAR_NAME} is stoped"
else
echo "${JAR_NAME} is not running"
fi
}
#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${JAR_NAME} is running. Pid is ${pid}"
else
echo "${JAR_NAME} is NOT running."
fi
}
#重启
restart(){
stop
start
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
5、大功告成,保存sh,点击esc,然后输入:wq,完毕
:wq
6、sh命令大全
6.1、启动命令
./app-8080.sh start
6.2、停止命令
./app-8080.sh stop
6.3、查看状态命令
./app-8080.sh status
6.4、重新启动命令
./app-8080.sh restart
接下来是干货部分:无感/不停服更新项目,无论是单机项目/微服务项目都是支持的,建议是使用nginx做转发/代理
1、单机版本的无感更新
一、假设我启动的jar有两个端口,8080/8081,那么我就需要创建两个sh,app-8080.sh和app-8081.sh,具体的修改部分对应修改就好了,现在的场景就是需要更新一个项目,目前运行着的端口号是8080,那么我们直接把最新的jar包更新了,直接启动8081的sh,等到8081启动完毕,去修改nginx的配置指向8081,然后重启一下nginx,确定好请求都到8081后,就直接把8080的进程给杀了
2、微服务版的无感更新
一、与上诉同理,网关模块需要和单机版本操作一致,其他业务模块更简单,直接启动副脚本,启动完毕,杀死就得进程即可,无需修改nginx配置,因为是微服务,哈哈哈哈哈,用到了服务注册与发现,懂得都懂哈
注:以上仅是个人观点,如有更好方案,请指点一下小弟,让小弟丰富一下知识~~~