【Linux部署】Linux环境下Java项目Jar包的启动指令

news/2025/2/28 1:31:42/文章来源:https://www.cnblogs.com/o-O-oO/p/18742427

在Java开发领域,我们经常需要将编译好的Java应用程序打包成Jar文件,以便于部署和运行。

特别是在Linux服务器上,管理多个Jar包的启动和停止是日常运维中的重要一环。

本文介绍如何在Linux环境下高效地启动和管理Jar包,同时提供简洁明了的代码示例,帮助大家更好地理解这一过程。

一、Jar包存放与启动脚本准备

首先,我们需要在Linux系统上设定一个统一的Jar包存放路径,

例如/opt/services/providers。

在这个目录下,我们将放置所有需要运行的Jar包以及一个名为service.sh的启动脚本。

这个脚本将帮助我们实现Jar包的快速启动、停止以及批量管理。

# 在/opt/services/providers目录下创建service.sh脚本
touch /opt/services/providers/service.sh
chmod +x /opt/services/providers/service.sh

二、service.sh脚本配置详解

接下来,我们将详细讲解service.sh脚本的配置过程。

这个脚本将包含Jar包的别名、名称、具体Jar文件以及存放路径等关键信息。

1. 环境变量设置

在脚本的开头,我们首先设置一些必要的环境变量,包括程序代码数组(别名)、程序名称数组、Jar包数组、Jar包路径数组以及项目目录等。

#!/bin/bash# 程序代码数组(别名)
APPS=(channelweb channelcorp channeldemand channelresume channeluser omsweb omscode omscorp omsdemand omsuser omszull oss publicweb search)# 程序名称数组(具体名称)
NAMES=(YL-B-Channel-WEB YL-B-Channel-Corp-Provider YL-B-Channel-Demand-Provider YL-B-Channel-Resume-Provider YL-B-Channel-User-Provider YL-B-BOS-WEB YL-B-Code-Provider YL-B-Corp-Provider YL-B-Demand-Provider YL-B-User-Provider YL-B-Zull YL-B-OSS-Provider YL-B-Public-WEB YL-B-Search-Provider)# Jar包数组
JARS=(YL-B-Channel-WEB.jar YL-B-Channel-Corp-Provider.jar YL-B-Channel-Demand-Provider.jar YL-B-Channel-Resume-Provider.jar YL-B-Channel-User-Provider.jar YL-B-BOS-WEB.jar YL-B-Code-Provider.jar YL-B-Corp-Provider.jar YL-B-Demand-Provider.jar YL-B-User-Provider.jar YL-B-Zull.jar YL-B-OSS-Provider.jar YL-B-Public-WEB.jar YL-B-Search-Provider.jar)# Jar包路径数组(注意这里的路径应该是相对于/opt/services/providers的子目录)
PATHS=(BM-B-Channel-WEB BM-B-Channel-Corp-Provider BM-B-Channel-Demand-Provider BM-B-Channel-Resume-Provider BM-B-Channel-User-Provider BM-B-BOS-WEB BM-B-Code-Provider BM-B-Corp-Provider BM-B-Demand-Provider BM-B-User-Provider BM-B-Zull BM-B-OSS BM-B-Public-WEB BM-B-Search-Provider)

2. 启动函数实现

接下来,我们实现启动函数start()。

这个函数将遍历所有的 Jar 包,并根据传入的参数(如特定别名或 all )来决定启动哪些 Jar 包。

start() {echo"---------------------------开始启动服务..."for ((i=0; i<${#APPS[@]}; i++))doappname="${APPS[$i]}"name="${NAMES[$i]}"classname="${JARS[$i]}"projectdir="/opt/services/providers/${PATHS[$i]}"path_log="/opt/logs/$name"if [ "$2" = "all" ] || [ "$2" = "$appname" ]; thencd$projectdirnohup java -jar \-XX:MetaspaceSize=256m \-XX:MaxMetaspaceSize=256m \-Xms512m \-Xmx512m \-Xmn256m \-Xss256k \-XX:SurvivorRatio=8 \-XX:+UseConcMarkSweepGC \$classname \>> $projectdir/nohup.out 2>&1 &# 等待Jar包启动并获取PIDPID=$(ps -ef | grep $(echo$classname | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}')cnt=0while [ -z "$PID" ] && [ $cnt -lt 30 ]dosleep 1scnt=$((cnt+1))PID=$(ps -ef | grep $(echo$classname | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}')doneif [ ! -z "$PID" ]; thenecho"$appname---$name:已经成功启动, PID=$PID"elseecho"$appname---$name:在$cnt秒内未启动,请检查!"fifidoneecho"---------------------------本次启动完成"
}

在这个函数中,我们使用了nohup命令来在后台运行Jar包,并将日志输出到指定的nohup.out文件中。

同时,我们还通过循环和ps命令来等待Jar包启动并获取其进程ID(PID)。
3. 停止函数实现

类似地,我们可以实现停止函数stop()。

这个函数将遍历所有的Jar包,并根据传入的参数来决定停止哪些Jar包。

stop() {echo"---------------------------开始停止服务..."for ((i=0; i<${#APPS[@]}; i++))doappname="${APPS[$i]}"name="${NAMES[$i]}"classname="${JARS[$i]}"projectdir="/opt/services/providers/${PATHS[$i]}"if [ "$2" = "all" ] || [ "$2" = "$appname" ]; thenPID=$(ps -ef | grep $(echo$classname | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}')if [ ! -z "$PID" ]; thenkill$PIDecho"$name:成功结束, PID=$PID"elseecho"$name:未运行"fifidoneecho"---------------------------本次停止完成"
}

在这个函数中,我们通过ps命令来获取Jar包的PID,并使用kill命令来停止它。

三、使用示例

现在,我们已经配置好了 service.sh 脚本。

接下来,我们可以通过以下命令来启动和停止 Jar 包 。

# 启动名为channeldemand的Jar包
./service.sh start channeldemand# 启动所有Jar包
./service.sh start all# 停止名为channeldemand的Jar包
./service.sh stop channeldemand# 停止所有Jar包
./service.sh stop all

同时,我们还可以通过tail -fn 200 nohup.out命令来查看特定Jar包的启动日志,以便于排查问题。

四、总结

通过本文的介绍,我们了解了如何在Linux环境下高效地启动和管理Java项目的Jar包。

我们使用了service.sh脚本来实现Jar包的批量启动和停止,并通过详细的代码示例和讲解来帮助大家更好地理解这一过程。

原创 马媛 程序语言

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

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

相关文章

手把手教你用 MicroPython 玩转幻尔串口舵机,代码+教程全公开

MicroPython串口舵机库,支持幻尔科技全系列舵机,支持mpremote工具一键导入,28条指令全测试。原文链接: FreakStudio的博客 摘要 MicroPython串口舵机库,支持幻尔科技全系列舵机,支持mpremote工具一键导入,28条指令全测试。 往期推荐: 学嵌入式的你,还不会面向对象??…

Plombery:将Python脚本的执行与Web界面的可视化监控完美结合的Python任务调度工具

还在为定时运行Python脚本而苦恼吗?还在为复杂的调度系统而头疼吗?今天,就让Plombery帮你解决这些问题!Plombery是一个简单易用的Python任务调度器,拥有友好的Web界面和REST API,让你轻松管理和监控你的Python脚本。告别复杂的配置和代码,Plombery将带你进入高效、便捷的…

AQS的acquire(int arg) 方法底层源码

一、定义 acquire(int arg) 是 AQS(AbstractQueuedSynchronizer)中的一个核心方法,用于在独占模式下获取同步状态。如果当前线程无法获取同步状态,则将其加入等待队列并阻塞,直到成功获取同步状态或被中断 1、acquire(int arg) 方法的作用功能:尝试获取同步状态(独占模式…

【钓鱼邮件】春节复工近期常见的钓鱼邮件

本期主要分享2025年2月常见的钓鱼邮件样本,特别提醒广大用户在春节复工高峰期加强安全防范。 补贴类钓鱼邮件 春节之后,五险一金补贴、年终奖补贴相关的钓鱼邮件依旧频发。钓鱼手法也有所提升,攻击者通常将通知内容放到附件中,并且对附件设置访问密码,试图绕过反垃圾系统检…

HTTP协议与RESTful API实战手册(终章):构建企业级API的九大秘籍

title: HTTP协议与RESTful API实战手册(终章):构建企业级API的九大秘籍 🔐 date: 2025/2/28 updated: 2025/2/28 author: cmdragon excerpt: 🏭 本文作为系列终章,通过物流管理系统的案例,揭秘API开发的完整流程。你将掌握: 深度解读28个HTTP协议进阶特性(ETag/CO…

第一周实验:二次开发

来源 来自大一舍友C++大作业。该项目模拟了一个图书管理系统,涉及到用户对于书籍的查看、借阅与归还,管理员对于书籍相关信息的增删改查。 运行环境+运行结果的截图 运行环境:Windows 11 + Visual Studio 2022main.cpp #include<Windows.h> #include "Account.h&…

学习笔记之day02 Linux-基础篇-系统安装

​1、操作系统简介操作系统:人与计算机硬件交互的中介Linux:内核+Shell +扩展软件Windows:内核+explorer.exe+软件类比法:计算机硬件 -- 内核 == 蛋黄 / Shell == 蛋清 / 外围应用程序 == 蛋壳常见的操作系统:Windows、Linux、DOS、UnixLinux操作系统开放源代码、可以自由…

绝缘电阻测试仪科普

什么是绝缘电阻绝缘电阻是指两个绝缘介质间的电阻,当另一端安装有电压源时,绝缘介质内电荷不能流动,因而受电压源作用,在另一端产生电势差,形成电阻抵消电压势差而不致使电荷漏出。一般情况下,绝缘电阻越大,电气设备的安全性就越好,缺陷率也越低。 为什么测量绝缘电阻绝…

【CodeForces训练记录】Educational Codeforces Round 175 (Rated for Div. 2)

训练情况赛后反思 CD连续卡题,D题树上层序遍历+加法原理,鉴定为基本的图论数据结构没学好 A题 直接打表,对于 i%3 = i%5 的情况,我们发现有三个一组,三个一组连续的数,每组第一个数之间差 15,所以我们 / 15 * 3 先把整组的数量算出来,再求是组内第几个,就能得到答案了…

软工五问

这个作业属于哪个课程 课程链接这个作业要求在哪里 作业要求这个作业的目标 学习使用markdown, 接触GitHub, 建立个人博客个人介绍 📋标签 广东湛江 人 期望成为 golang后端工程师 学习经历持续学习golang及其框架, 设计模式 持续学习后端各个组件的可靠高效解决方案兴趣爱好…

清华大学推出的5册免费的 DeepSeek 学习使用指南!

前言 在当今这个信息洪流、技术飞速迭代的时代,DeepSeek的横空出世极大地降低了普通人利用人工智能技术的门槛。然而,尽管机遇就在眼前,仍有不少朋友面对DeepSeek感到无从下手,不知如何利用它来紧握时代赋予的红利。对此,清华大学展现出了高度的社会责任感与前瞻性,推出了…

拆解分析行业头部米家绿米燃气报警器怎么样?

小米绿米天然气卫士拆解,内置Zigbee模组,需要连接Zigbee 3.0网关 或者 具备Zigbee 3.0网关功能的设备报警 天然气是每家每户日常生活中都会使用到的清洁能源,因此对于天然气的安全防护时刻不能放松。小米天然气卫士是小米与业内知名品牌 赛特威尔 联手打造的一款产品,可探测…