java项目启动脚本

在Linux系统上发布Java项目通常涉及以下步骤:

  1. 打包项目:首先,需要将Java项目打包成可执行的 JAR 文件。你可以使用构建工具如 Maven 或 Gradle 来构建项目并生成 JAR 文件。
  2. 上传JAR文件:将打包好的 JAR 包上传到服务器的目标位置。
  3. 编写启动脚本:编写启动脚本,可以是 Shell 脚本或者 systemd service 单元文件,用于启动和管理 Java 应用。
  4. 设置环境变量:确保服务器上已经安装了 Java 运行环境,并设置好 JAVA_HOME 等必要的环境变量。
  5. 启动应用:运行启动脚本来启动 Java 应用程序。

下面是一个简单的例子,展示如何通过 Shell 脚本发布和启动一个Java项目:

#!/bin/bash# 设置Java应用目录
APP_HOME=/path/to/your/application
PROJECT_JAR_NAME=your-application.jar# 检查正在运行的Java进程并停止
PID=`ps -ef | grep java | grep "$PROJECT_JAR_NAME" | grep -v grep | awk '{print $2}'`
if [ -n "$PID" ]; thenkill $PID
fi# 备份旧日志文件
mv $APP_HOME/logs/nohup.log $APP_HOME/logs/nohup_$(date +"%Y%m%d%H%M%S").log# 启动Java应用
nohup java -jar $APP_HOME/$PROJECT_JAR_NAME > $APP_HOME/logs/nohup.log 2>&1 &

根据项目的需要优化以下脚本

# 项目名称
PROJECT_JAR_NAME="skyline-iot*.*jar"
# 应用根目录
APP_HOME=/usr/local/application/skyline-iot# 查找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" ]; thenecho -e "Stopping the $PROJECT_JAR_NAME pid: $PID ...\c"kill $PID > /dev/null 2>&1# 等待进程停止COUNT=0while [ $COUNT -lt 1 ]; doecho -e ".\c"sleep 1COUNT=1PID_EXIST=`ps -f -p $PID | grep java`if [ -n "$PID_EXIST" ]; thenCOUNT=0fidoneecho -e "Stopped success \n"
fi# 如果日志目录不存在,则创建
if [ ! -d $APP_HOME/logs ]; thenmkdir logs
fi# Java运行参数配置
JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
JAVA_DEBUG_OPTS=""
if [ "$1" = "debug" ]; thenJAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
fi
JAVA_JMX_OPTS=""
if [ "$1" = "jmx" ]; thenJAVA_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 ]; thenJAVA_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" ]; thenecho "start success!pid: $PIDS"
elseecho "fail to start"
fi

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724944.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Objective-C blocks 概要

1.block的使用 1.1什么是block? Blocks是C语言的扩充功能:带有自动变量(局部变量)的匿名函数。 “带有自动变量”在Blocks中表现为“截取自动变量" “匿名函数”就是“不带名称的函数” 块,封装了函数调用及调用…

全方位碾压chatGPT4的全球最强模型Claude 3发布!速通指南在此!保姆级教学拿脚都能学会!

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

Android开发岗还不会这些问题,温故而知新

前言 前前后后经历过大项目、小项目,跨平台,小程序,Nodejs服务等等,目前在做的Rom开发,定制各种手机中的奇葩需求,从应用层到Framework层,再到C层,再到驱动,最终到Linux&…

MybatisPlus入门详解

一、MyBatisPlus 简介 1.1 创建新模块 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency> 由于mp并未被收录到idea的系统内置配置,无法…

使用 Tesseract 在 C# 中进行光学字符识别(OCR)

使用 Tesseract 在 C# 中进行光学字符识别&#xff08;OCR&#xff09;&#xff1a;完整教程 引言一、准备工作步骤 1&#xff1a;安装 Tesseract OCR 引擎步骤 2&#xff1a;安装 Tesseract.NET 包 二、进行光学字符识别步骤 1&#xff1a;创建 Tesseract 实例步骤 2&#xff…

Solidity Uniswap V2 Pair中添加流动性

添加流动性的功能的用户入口&#xff0c;UniswapV2在UniswapV2Router中实现&#xff0c;它用来计算新的流动性并发行LP-Token&#xff0c;流动性管理简单地视为LP-Token管理。当你为一个pair增加流动性时&#xff0c;合约会创造LP Token;当你移除流动性时&#xff0c;LP-Token就…

【debug】element-ui时间控件回显后不可编辑且显示为空

问题&#xff1a;使用element-ui的时间控件回显数据&#xff0c;编辑数据没有反应&#xff1a;点时间和“确认”按钮都没反应。 输入框中会显示数据&#xff0c;但提交时的校验显示为空。 <el-form-item label"开始时间" prop"limitStartTime"><…

局部最小值问题

局部最小值问题&#xff1a; 条件&#xff1a;n个数的无序数组 array&#xff0c;相邻两个数一定不相等&#xff0c;找出其中的一个局部最小值。 如果array[0]< array[1] ,返回 array[0];如果array[n-1]<array[n-2]&#xff0c;返回array[n-1];其他的位置需要满足 array[…

xss.haozi.me:0X0D

alert(1) -> 记住要回车一下-->是js的一个注释符但是只能用在最前面前面有一个空格都不行

【LeetCode】升级打怪之路 Day 14:二叉树的遍历

今日题目&#xff1a; 144. 二叉树的前序遍历94. 二叉树的中序遍历145. 二叉树的后序遍历102. 二叉树的层序遍历107. 二叉树的层序遍历 II199. 二叉树的右视图637. 二叉树的层平均值429. N 叉树的层序遍历515. 在每个树行中找最大值116. 填充每个节点的下一个右侧节点指针117. …

【YOLO v5 v7 v8 v9小目标改进】RevCol:解决深度学习信息从低层(输入)传递至高层(输出)的过程中,信息会逐层丢失问题

RevCol&#xff1a;解决深度学习信息从低层&#xff08;输入&#xff09;传递至高层&#xff08;输出&#xff09;的过程中&#xff0c;信息会逐层丢失问题 学习解耦表示可逆列网络&#xff08;RevCol&#xff09;子特征1&#xff1a;多级可逆单元子特征2&#xff1a;可逆列架构…

父子组件嵌套时候,生命周期的加载顺序

1.当子组件同步引入时&#xff1a; 父组件&#xff1a;beforecreate 父组件&#xff1a;created 父组件&#xff1a;beforeMount 子组件&#xff1a;beforecreate 子组件&#xff1a;created 子组件&#xff1a;beforeMount 子组件&#xff1a;mounted 父组件&#xff…

令马斯克眼红到起诉的GPT-4到底是什么?

令马斯克眼红到起诉的GPT-4到底是什么&#xff1f; 在人工智能&#xff08;AI&#xff09;的发展历程中&#xff0c;GPT-4的问世无疑是一大里程碑。 但就在这项技术引领AI行业走向新高度之时&#xff0c;特斯拉CEO埃隆马斯克因与OpenAI及其CEO萨姆奥尔特曼等人在合同协议上的…

Git命令(持续更新中...)

命令说明git config --globl user.name “用户名”配置本地git用户git config --global user.email “邮箱”配置本地git邮箱git init初始化git代码仓库git add .把当前目录的所有改动提交至暂存区git add xxx.txt只把xxx.txt某个指定的文件提交至暂存区git commit -m “提交信…

JVM学习目录

JVM ✅ JVM运行时内存结构 ✅ JVM常用启动参数 ✅ JVM内存分配与垃圾收集流程 ✅ 什么是垃圾回收机制&#xff08;Garbage Collection&#xff0c;简称GC&#xff09; ✅ 如何调用垃圾回收器的方法 ✅ GC如何判定对象已死 ✅ 方法区的垃圾收集 ✅ 垃圾收集算法 ✅ JVM垃圾回…

ARM电源策略单元Power Policy Unit

本规范描述了电源策略单元&#xff08;PPU&#xff09;架构。它定义了PPU架构的1.1版本。 PPU规范的1.1版本增加了操作模式支持。这使得能够为功能或更高粒度的电源控制原因提供组件特定的电源模式支持。 在本文档中&#xff0c;对PPU或PPU的引用指的是实现了此PPU架构的设备…

十四、重写与多态

重写、多态 上一讲是&#xff0c;子类对父类横向上的扩展 这一讲是&#xff0c;子类对父类纵向上的扩展 方法重写 使用override关键字重写父类的方法 将父类原本方法的逻辑更新成新版本的逻辑 注&#xff1a;仅能重写可见的父类成员&#xff0c;并且重写要保持签名一致。 签名一…

GEE 将裁剪后的Sentinel-2影像 在ArcGIS中去除空值

在ArcGIS中&#xff0c;可以使用栅格计算器&#xff08;Raster Calculator&#xff09;工具来设置NoData值为空。以下是在ArcGIS中将NoData值设置为空的步骤&#xff1a; 打开ArcGIS软件并加载下载的Sentinel-2影像数据。 影像Nodata空值以黑色背景呈现&#xff0c;影响矢量数据…

SpringCloud2023最新版本该如何进行组件选型?

前言 Developing distributed systems can be challenging. Complexity is moved from the application layer to the network layer and demands greater interaction between services. Making your code ‘cloud-native’ means dealing with 12-factor issues such as exte…

鸿蒙4.0-DevEco Studio界面工程

DevEco Studio界面工程 DevEco Studio 下载与第一个工程新建的第一个工程界面回到Project工程结构来看 DevEco Studio 下载与第一个工程 DevEco Studio 下载地址&#xff1a;点击跳转 https://developer.harmonyos.com/cn/develop/deveco-studio#download 学习课堂以及文档地址…