#功能:
#1、指定用户运行——未实现
#2、默认logs目录——可否另外指定?
#3、JMX监控——待实现,需要启用第二参数来指定
#4、设置JVM参数(指定程序运行名称、时区、内存大小、GC回收器设置、gc日志文件)
#5、 指定配置文件的环境变量
#6、start 启动时检查程序是否已经启动
#7、stop 停止程序、stop之前会先dump。带完善:kill失败检查,然后用kill -9, 有可能存在多个server
#8、status 查看程序是否运行
#9、restart 重启
#10、dump dump系统状态和jvm信息到文件中
#11、配置文件使用哪种方式更好?
#12、默认的jvm配置
#待补充端口占用检查
#使用:
#1、上传.sh脚本到服务器中,授权脚本执行权限sudo chmod +x ./app.sh
#2、启动示例 ./app.sh start
ENV=dev
RUNNING_USER=root
ADATE=`date +%Y%m%d%H%M%S`
SERVER_NAME=springboot-demo
APP_HOME=`pwd`
dirname $0|grep "^/" >/dev/null
if [ $? -eq 0 ];then
APP_HOME=`dirname $0`
else
dirname $0|grep "^\." >/dev/null
retval=$?
if [ $retval -eq 0 ];then
APP_HOME=`dirname $0|sed "s#^.#$APP_HOME#"`
else
APP_HOME=`dirname $0|sed "s#^#$APP_HOME/#"`
fi
fi
if [ ! -d "$APP_HOME/logs" ];then
mkdir $APP_HOME/logs
fi
LOG_PATH=$APP_HOME/logs/$SERVER_NAME.out
GC_LOG_PATH=$APP_HOME/logs/gc-$SERVER_NAME-$ADATE.log
#JMX监控需用到
JMX="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=1091 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
#JVM参数
JVM_OPTS="-Dname=$SERVER_NAME -Djeesuite.configcenter.profile=$ENV -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -Xloggc:$GC_LOG_PATH -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
JAR_FILE=$SERVER_NAME.jar
pid=0
start(){
checkpid
if [ ! -n "$pid" ]; then
#JAVA_CMD="nohup java -server -jar $JVM_OPTS $JAR_FILE > $LOG_PATH 2>&1 &"
#su - $RUNNING_USER -c "$JAVA_CMD"
nohup java -server -jar $JVM_OPTS $JAR_FILE > $LOG_PATH 2>&1 &
echo "---------------------------------"
echo "启动完成,按CTRL+C退出日志界面即可>>>>>"
echo "---------------------------------"
sleep 3s
tail -f $LOG_PATH
else
echo "$SERVER_NAME is runing PID: $pid"
fi
}
status(){
checkpid
if [ ! -n "$pid" ]; then
echo "$SERVER_NAME not runing"
else
echo "$SERVER_NAME runing PID: $pid"
sleep 4s
tail -f $LOG_PATH
fi
}
checkpid(){
pid=`ps -ef |grep $JAR_FILE |grep -v grep |awk '{print $2}'`
}
stop(){
checkpid
if [ ! -n "$pid" ]; then
echo "$SERVER_NAME not runing"
else
dump
echo "$SERVER_NAME stop..."
kill $pid
fi
}
restart(){
stop
sleep 1s
start
}
dump(){
LOGS_DIR=$APP_HOME/logs/
DUMP_DIR=$LOGS_DIR/dump
if [ ! -d $DUMP_DIR ]; then
mkdir $DUMP_DIR
fi
DUMP_DATE=`date +%Y%m%d%H%M%S`
DATE_DIR=$DUMP_DIR/$DUMP_DATE
if [ ! -d $DATE_DIR ]; then
mkdir $DATE_DIR
fi
echo "Dumping the $SERVER_NAME ...\c"
PIDS=`ps -ef | grep java | grep $JAR_FILE |awk '{print $2}'`
for PID in $PIDS ; do
jstack $PID > $DATE_DIR/jstack-$PID.dump 2>&1
echo -e "PID=$PID .\c"
jinfo $PID > $DATE_DIR/jinfo-$PID.dump 2>&1
echo -e ".\c"
jstat -gcutil $PID > $DATE_DIR/jstat-gcutil-$PID.dump 2>&1
echo -e ".\c"
jstat -gccapacity $PID > $DATE_DIR/jstat-gccapacity-$PID.dump 2>&1
echo -e ".\c"
jmap $PID > $DATE_DIR/jmap-$PID.dump 2>&1
echo -e ".\c"
jmap -heap $PID > $DATE_DIR/jmap-heap-$PID.dump 2>&1
echo -e ".\c"
jmap -histo $PID > $DATE_DIR/jmap-histo-$PID.dump 2>&1
echo -e ".\c"
if [ -r /usr/sbin/lsof ]; then
/usr/sbin/lsof -p $PID > $DATE_DIR/lsof-$PID.dump
echo -e ".\c"
fi
done
if [ -r /bin/netstat ]; then
/bin/netstat -an > $DATE_DIR/netstat.dump 2>&1
echo -e "netstat.dump ..."
fi
if [ -r /usr/bin/iostat ]; then
/usr/bin/iostat > $DATE_DIR/iostat.dump 2>&1
echo -e "iostat.dump ..."
fi
if [ -r /usr/bin/mpstat ]; then
/usr/bin/mpstat > $DATE_DIR/mpstat.dump 2>&1
echo -e "mpstat.dump ..."
fi
if [ -r /usr/bin/vmstat ]; then
/usr/bin/vmstat > $DATE_DIR/vmstat.dump 2>&1
echo -e "vmstat.dump ..."
fi
if [ -r /usr/bin/free ]; then
/usr/bin/free -t > $DATE_DIR/free.dump 2>&1
echo -e "free.dump ..."
fi
if [ -r /usr/bin/sar ]; then
/usr/bin/sar > $DATE_DIR/sar.dump 2>&1
echo -e ".\c"
fi
if [ -r /usr/bin/uptime ]; then
/usr/bin/uptime > $DATE_DIR/uptime.dump 2>&1
echo -e ".\c"
fi
echo "OK!"
echo "DUMP: $DATE_DIR"
}
case $1 in
start) start;;
stop) stop;;
restart) restart;;
status) status;;
dump) dump;;
*) echo "require start|stop|restart|status|dump" ;;
esac
* 参考文档 [url](https://blog.csdn.net/vakinge/article/details/78706679)
- 大小: 64.6 KB
- 大小: 32.7 KB
分享到:
相关推荐
linux服务器,springboot,spring cloud、spring cloud alibaba等项目启动脚本 下载脚本, 1,上传脚本至jar包同级目录 2,更改脚本: jar包名称 项目文件路径 日志路径(包含日志名称) 脚本已配置好jvm优化...
jenkins启动spring boot 服务shll启动脚本 主要是备份原来的服务,kill掉重新部署
一般我们在开发的时候经常使用的是前面两种运行方式,在部署实施的时候使用的第三种方式,下面我们就重点说明下载linux环境中运行和停止springboot项目的指令和脚本: 一、指令 nohup 不挂断运行指令 一般在linux...
Spring Boot 使创建独立的、产品级的、基于Spring的应用变得更容易,你只需要运行run即可...你可以使用Spring Boot创建Java应用,用java-jar或更传统的war包来部署应用。我们也提供了运行”Spring脚本”的命令行工具。
Spring Boot 2 官方指导手册译文 ...您可以使用 Spring Boot 来创建 Java 应用程序,这些应用程序可以通过使用 java -jar或更传统的 war 部署来启动。我们还提供了一个运行“spring 脚本”的命令行工具。
您可以使用Spring Boot创建可以使用java -jar或更传统的war部署启动的Java应用程序 。我们还提供了一个运行“spring脚本”的命令行工具。 我们的主要目标是: 为所有Spring开发提供从根本上更快且可广泛访问的入门...
Linux下SpringBoot/SpringCloud微服务部署Shell,对微服务jar进行部署,格式如下: sh spring-boot.sh $OPERATION jar包.jar --spring.profiles.active={自定义} OPERATION支持start、stop、status
4? 第1章会对Spring Boot进行概述,内容涵盖最基本的自动配置、起步依赖、命令行界面和Actuator。? 第2章会进一步深入... 第8章讨论了各种部署Spring Boot应用程序的方法,包括传统的应用程序服务器部署和云部署。
spring boot+hibernate+spring mvc+thymeleaf 实例,下载导入即可运行,可独立部署到独立tomcat,可内置tomcat运行,配置都在,数据库mysql直接导入脚本即可,可加我扣扣410987712一起学习
Spring Boot使开发独立的,产品级别的基于Spring的应用变得非常简单,你只...你可以使用Spring Boot创建Java应用,并使用 java -jar 启动它或采用传统的war部署方式。我们也提供了一个运行"spring 脚本"的命令行工具。
spring boot 源码,带完整数据库脚本,可直接部署运行
包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:...
Spring Boot Ssh Shell ssh的Spring Boot应用程序中的Spring Shell 有关更多信息,请访问spring shell或。入门相依性< dependency> < groupId>...
主要介绍了Spring Boot集成spring-boot-devtools开发时实现热部署的方式,文中还给大家提到了spring boot 实现热部署的方式及集成注意事项,感兴趣的朋友跟随脚本之家小编一起学习吧
最近在工作中遇到了一个问题,需要极速的部署Spring Boot应用,发现网上这方面的资料较少,所以自己来总结下,这篇文章主要给大家介绍了关于Spring Boot应用的极速部署脚本的相关资料,需要的朋友可以参考借鉴,下面...
本设计源码提供了一个基于Java和Vue2.x的Spring Boot快速开发平台,包含223个文件,其中144个java源文件,23个js脚本文件,14个xml配置文件,8张png图片,5个yml文件,5个css样式文件,4个sql文件,4个map文件,3个...
你可以使用Spring Boot创建Java应用,并使用 java -jar 启动它或采用传统的 war部署方式。我们也提供了一个运行"spring脚本"的命令行工具。 我们主要的目标是: 为所有Spring开发提供一个从根本上更快,且随处可得的...