网站首页 > java教程 正文
先检查环境变量:确保服务器上已经安装了 Java 运行环境,并设置好 JAVA_HOME 等必要的环境变量。
1、需要将Java项目打包成可执行的 JAR 文件。你可以使用构建工具如 Maven 或 Gradle 来构建项目并生成 JAR 文件。
2、通过ftp工具上传JAR文件:将打包好的 JAR 包上传到服务器的目标位置。
3、编写启动脚本:编写启动脚本,可以是 Shell 脚本或者 systemd service 单元文件,用于启动和管理 Java 应用。
4、启动应用:运行启动脚本来启动 Java 应用程序。
下面是一个简单的例子,展示如何通过 Shell 脚本发布和启动一个Java项目:
# 项目名称
PROJECT_JAR_NAME="springboot-app.*jar"
# 应用根目录
APP_HOME=/opt/java/application/springboot-app
# 查找JAR包并保存到LIB_JARS变量中
LIB_JARS=`find $APP_HOME/$PROJECT_JAR_NAME |awk 1`
# 加载系统环境变量配置文件
source /etc/profile
# Java可执行路径
JAVA=/usr/bin/java
# 查找正在运行的Java进程的PID
PID=`ps -ef | grep java | grep "$PROJECT_JAR_NAME" | grep -v grep |awk '{print $2}'`
# 如果存在正在运行的进程,则尝试停止它
if [ -n "$PID" ]; then
echo -e "Stopping the $PROJECT_JAR_NAME pid: $PID ...\c"
kill $PID > /dev/null 2>&1
# 等待进程停止
COUNT=0
while [ $COUNT -lt 1 ]; do
echo -e ".\c"
sleep 1
COUNT=1
PID_EXIST=`ps -f -p $PID | grep java`
if [ -n "$PID_EXIST" ]; then
COUNT=0
fi
done
echo -e "Stopped success \n"
fi
# 如果日志目录不存在,则创建
if [ ! -d $APP_HOME/logs ]; then
mkdir logs
fi
# Java运行参数配置
JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
JAVA_DEBUG_OPTS=""
if [ "$1" = "debug" ]; then
JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
fi
JAVA_JMX_OPTS=""
if [ "$1" = "jmx" ]; then
JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
fi
# 如果未配置JAVA_MEM_OPTS,则设置默认值
if [ -z $JAVA_MEM_OPTS ]; then
JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -Xss512k -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=4 "
fi
# Java Dump配置
JAVA_DUMP_OPTS="-XX:ErrorFile=$APP_HOME/logs/hs_err_%%p.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$APP_HOME/logs"
# 输出Java及启动信息
echo -e $JAVA
echo -e "Starting the $LIB_JARS ...\c"
# 启动Java应用并重定向输出至日志文件
$JAVA $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS $JAVA_DUMP_OPTS -jar $LIB_JARS > $APP_HOME/logs/nohup-$(date +%Y-%m-%d).log 2>&1 &
# 等待1秒
sleep 1
# 检查新启动的Java进程是否存在
PIDS=`ps -ef | grep java | grep -v grep | grep "$PROJECT_JAR_NAME" | awk '{print $2}'`
if [ -n "$PIDS" ]; then
echo "start success!pid: $PIDS"
else
echo "fail to start"
fi
猜你喜欢
- 2024-11-13 Java+Redis 通过Lua 完成库存扣减,创建消息队列,异步处理消息
- 2024-11-13 [每日一题][Redis]为什么Lua脚本可以保证原子性?
- 2024-11-13 python脚本查找java类所属jar包(python 调用jar)
- 2024-11-13 Gradle 6.4 RC4 发布,带来 Java 模块、Groovy DSL 脚本插件
- 2024-11-13 Scala声明变量 定义函数 编写脚本
- 2024-11-13 Javacom英文脚本手写字体(java脚本怎么写)
- 2024-11-13 宝藏脚本!Linux系统快速启动Java应用服务,提升开发效率!
- 2024-11-13 分享一个实用脚本——服务器日志清理脚本
- 2024-11-13 只因知晓Java平台的脚本引擎,面试官当场录用:这小子还不错
- 2024-11-13 Shell编程:命令列表 && 和 ||
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)