使用shell脚本在Linux中管理Java应用程序

文章目录

  • 前言
  • 一、目录结构
  • 二、脚本实现
    • 1. 脚本内容
    • 2. 使用说明
      • 2.1 配置脚本
      • 2.2 脚本部署
      • 2.3 操作你的Java应用
  • 总结


前言

在日常开发和运维工作中,管理基于Java的应用程序是一项基础且频繁的任务。本文将通过一个示例脚本,展示如何利用Shell脚本简化这一流程,实现Java应用的一键式启动、停止与重启操作。本脚本不仅提升了工作效率,还确保了操作的标准化与可靠性。


一、目录结构

这是一个典型的Java项目部署结构,其中user_defined目录用于存放管理应用的各种脚本,其下细分有多个子目录以组织不同的资源。

.
├─user_defined     # 使用者自定义目录名      
│  ├─bin           # 脚本存放目录
│  ├─conf          # 配置文件目录
│  ├─lib           # 应用依赖的jar包存放目录
│  ├─log           # 应用日志输出目录
│  ├─pid           # 存放进程ID文件的目录
│  └─sql           # SQL脚本或数据相关文件

二、脚本实现

1. 脚本内容

#!/bin/bash# 检查脚本是否被传递了有效的命令
if [ -z "$1" ]; thenecho "Usage: $0 {start|stop|restart}"exit 1
fi# jar包名称,不带.jar后缀
JAR_NAME='example'
# 获取当前脚本所在的目录
SCRIPT_BIN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# jar包主目录
JARPACKAGE_HOME="$SCRIPT_BIN/.."# 设置jar包的路径
JAR_PATH="$JARPACKAGE_HOME/lib/$JAR_NAME.jar"# 检查当前目录下是否存此jar文件
if [ ! -f "$JAR_PATH" ]; thenecho "Error: $JAR_NAME.jar not found."exit 1
fi# 定义运行的Java命令
JAVA_CMD="java -jar $JAR_PATH"# 创建pid目录,如果不存在
PID_DIR="$JARPACKAGE_HOME/pid"
mkdir -p "$PID_DIR"# 启动jar包
start() {echo "Starting jar package..."# nohup $JAVA_CMD > /dev/null 2>&1 &# 使用nohup在后台运行jar包,并将日志输出到文件nohup $JAVA_CMD > $JARPACKAGE_HOME/log/${JAR_NAME}.log 2>&1 &echo $! > "$PID_DIR/$JAR_NAME.pid"echo "Jar package is started. pid is saved in $PID_DIR/$JAR_NAME.pid"
}# 停止jar包
stop() {echo "Stopping jar package..."PID=$(cat "$PID_DIR/$JAR_NAME.pid")if [ -n "$PID" ]; thenkill $PIDecho "Jar package has been stopped"yes | rm "$PID_DIR/$JAR_NAME.pid"elseecho "Error: Jar package is not running."fi
}# 重启jar package
restart() {echo "Restarting jar package..."stopsleep 3start
}# 根据传入的参数调用相应的方法
case "$1" instart)start;;stop)stop;;restart)restart;;*)echo "Error: Invalid command. Use {start|stop|restart}."exit 1;;
esacexit 0

2. 使用说明

2.1 配置脚本

  1. 修改脚本以适配你的应用:打开提供的Shell脚本模板,找到JAR_NAME变量,将其值更改为你的Java应用程序jar包名称(不包含.jar后缀)。如果Java应用运行时需要额外参数,可以在JAVA_CMD变量中追加这些参数。

2.2 脚本部署

  1. 保存脚本:将修改后的脚本保存为.sh文件,推荐命名为与你的应用相关的易于识别的名字,如myapp-manager.sh

  2. 构建目录结构:依据之前提到的目录结构图,在你的工作目录下创建相应的目录。确保bin目录下存放着你的Shell脚本,而lib目录内则需放入对应的jar包。

2.3 操作你的Java应用

  1. 启动应用:通过终端切换到脚本所在的bin目录,然后运行以下命令启动应用:

    ./myapp-manager.sh start
    

    这将会后台启动你的Java应用,并将输出信息保存到log目录下.log结尾的日志文件中,同时在pid目录下生成一个包含应用进程ID的文件。

  2. 停止应用:当需要关闭应用时,执行:

    ./myapp-manager.sh stop
    

    此命令会读取PID文件,发送终止信号给应用进程,并清理PID文件。

  3. 重启应用:如果需要重启应用以应用最新更改,仅需输入:

    ./myapp-manager.sh restart
    

    这个操作会自动完成停止和再次启动的全过程,中间包含短暂的等待时间以确保平稳过渡。


总结

通过上述Shell脚本,我们不仅实现了Java应用的便捷管理,还保证了操作的自动化与标准化,大大减轻了运维负担。无论是日常开发调试还是生产环境的部署维护,这样的脚本都是提升效率的利器。

希望本教程对您有所帮助!如有任何疑问或问题,请随时在评论区留言。感谢阅读!

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

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

相关文章

【Python/Pytorch - 网络模型】-- TV Loss损失函数

文章目录 文章目录 00 写在前面01 基于Pytorch版本的TV Loss代码02 论文下载 00 写在前面 在医学图像重建过程中,经常在代价方程中加入TV 正则项,该正则项作为去噪项,对于重建可以起到很大帮助作用。但是对于一些纹理细节要求较高的任务&am…

期权无风险套利(Risk-Free Arbitrage)举例以及期权无套利定价公式

期权市场的无风险套利 中文版 期权市场中的套利实例 为了清楚地说明,让我们通过一个现实的例子来展示套利。 期权市场中的套利实例 假设市场上有以下价格: 标的股票价格:100美元欧式看涨期权(行权价100美元,3个月…

MySQL 保姆级教程(六):用通配符进行过滤

第 8 章 用通配符进行过滤 8.1 LIKE 操作符 通配符: 用来匹配值的一部分的特殊字符 搜索模式: 由字面值、通配符或两者组合构成的搜索条件 为了在搜索子句中使用通配符,必须使用 LIKE 操作符 8.1.1 百分号(%)通配符 输入: SELECT server_…

MongoDB~分片数据存储Chunk;其迁移原理、影响,以及避免手段

分片数据存储:Chunk存储 Chunk(块) 是 MongoDB 分片集群的一个核心概念,其本质上就是由一组 Document 组成的逻辑数据单元。每个 Chunk 包含一定范围片键的数据,互不相交且并集为全部数据。 分片集群不会记录每条数据…

Python 基础:类

目录 一、类的概念二、定义类三、创建对象并进行访问四、修改属性的值方法一:句点表示法直接访问并修改方法二:通过方法进行修改 五、继承继承父类属性和方法重写父类方法 六、将实例用作属性七、导入类导入单个类从一个模块中导入多个类导入整个模块导入…

C语言的基本输入输出函数+构造类型数据——数组

C语言的基本输入输出函数 1. 字符输入输出函数 getchar()、putchar() getchar():从标准输入(通常是键盘)读取一个字符,并返回其ASCII值。putchar():将指定的字符(由其ASCII值表示)写入标准输出…

Java Stream流 takeWhile,dropWhile

一. takeWhile 顺序返回符合条件的值,一旦条件不符合立即停止继续判断在元素5之后,虽然还有 < 5 的数据,但是不会作为条件进行判断 // 创建一个Stream流 Stream<Integer> streamNum1 Stream.of(2, 3, 4, 5, 6, 1, 1, 3);List<Integer> numList1 streamNum1.…

10_Transformer预热---注意力机制(Attention)

1.1 什么是注意力机制(attention) 注意力机制&#xff08;Attention Mechanism&#xff09;是一种在神经网络中用于增强模型处理特定输入特征的能力的技术。它最早被应用于自然语言处理&#xff08;NLP&#xff09;任务中&#xff0c;特别是在机器翻译中&#xff0c;如Google的…

python14 字典类型

字典类型 键值对方式&#xff0c;可变数据类型&#xff0c;所以有增删改功能 声明方式1 {} 大括号&#xff0c;示例 d {key1 : value1, key2 : value2, key3 : value3 ....} 声明方式2 使用内置函数 dict() 创建1)通过映射函数创建字典zip(list1,list2) 继承了序列的所有操作 …

Linux基础I/O之文件描述符fd 重定向(上)

目录 一、预备知识 二、C语言中的文件接口 三、系统调用中的文件接口 一、预备知识 首先我们要明确的一个观点是 --- 文件 内容 属性。而且我们之前也还将过一个概念&#xff0c;那就是Linux下一切皆文件。 内容是数据&#xff0c;属性也是数据 --- 那么也就是说我…

使用STL算法函数有效提升STL列表的搜索速度(附源码)

STL(Standard Templete Library)活动模板库已被广泛地应用于各种C++程序的开发中,STL中vector、list、map等列表极大地方便了我们日常的开发,不再需要我们去实现链表等数据结构,使用这些列表能基本能解决开发过程中遇到的各种问题。网上关于STL的文章比较多,今天我们就来…

代码随想录——组合总和Ⅱ(Leetcode 40)需要回顾

题目链接 回溯 本题的难点在于&#xff1a;集合&#xff08;数组candidates&#xff09;有重复元素&#xff0c;但还不能有重复的组合。 思想&#xff1a;元素在同一个组合内是可以重复的&#xff0c;怎么重复都没事&#xff0c;但两个组合不能相同。所以要去重的是同一树…

统计套利—配对交易策略

配对交易是一种基于统计学的交易策略&#xff0c;通过两只股票的差价来获取收益&#xff0c;因而与很多策略不同&#xff0c;它是一种中性策略&#xff0c;理论上可以做到和大盘走势完全无关。 配对交易的基本原理是&#xff0c;两个相似公司的股票&#xff0c;其股价走势虽然在…

SpringSecurity(JWT、SecurityConfig、Redis)

可能会报错Last unit does not have enough valid bits 把jwtUtils的KEY改成偶数位 主要用于校验&#xff0c;授权 导入依赖 <dependency) <groupId>org.springframework. boot</groupId> <artifactId>spring-boot-starter-security</artifactId) <…

[Linux] TCP协议介绍(3): TCP协议的“四次挥手“过程、状态分析...

TCP协议是面向连接的 上一篇文章简单分析了TCP通信非常重要的建立连接的"三次握手"的过程 本篇文章来分析TCP通信中同样非常重要的断开连接的"四次挥手"的过程 TCP的"四次挥手" TCP协议建立连接 需要"三次握手". "三次挥手&q…

基于STM32和人工智能的自动驾驶小车系统

目录 引言环境准备自动驾驶小车系统基础代码实现&#xff1a;实现自动驾驶小车系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景&#xff1a;自动驾驶应用与优化问题解决方案与优化收尾与总结 1. 引言 随着人工智能和嵌入式系统技术的…

稀疏矩阵是什么 如何求

稀疏矩阵是一种特殊类型的矩阵&#xff0c;其中大多数元素都是零。由于稀疏矩阵中非零元素的数量远少于零元素&#xff0c;因此可以使用特定的数据结构和算法来高效地存储和处理它们&#xff0c;从而节省存储空间和计算时间。 RowPtr 数组中的每个元素表示对应行的第一个非零元…

变压器纵联差动保护的Simulink仿真

利用Simulink在变压器空载合闸励磁涌流的仿真模型的基础上将变压器改为采用Yd11联结且不考虑饱和特性,增加外部故障模块Fault2,得到新的仿真模型如图1所示。 图1 变压器的Simulink仿真模型 在建立模型时,请注意三相电压电流测量模块Um,UN的方向。比率制动特性纵差保护…

Docker 镜像****后,如何给Ubuntu手动安装 docker 服务

Docker 镜像****后&#xff0c;如何给Ubuntu手动安装 docker 服务 下载地址下载自己需要的安装包使用下面的命令进行安装启动服务 最近由于某些未知原因&#xff0c;国内的docker镜像全部被停。刚好需要重新安装自己的笔记本为双系统&#xff0c;在原来的Windows下&#xff0c;…

目标检测算法SSD与FasterRCNN

目标检测算法SSD与FasterRCNN SSD:&#xff08; Single Shot MultiBox Detector&#xff09;特点是在不同特征尺度上预测不同尺度的目标。 SSD网络结构 首先对网络的特征进行说明&#xff1a;输入的图像是300x300的三通道彩色图像。 网络的第一个部分贯穿到Vgg16模型 Conv5的…