当前位置: 首页 > news >正文

开发小运维-jar包服务shell启动脚本

现在大多数企业都基本会构建docker镜像去部署java应用服务,但是有些特殊场景可能需要我们手动去启动某个java服务包,本章主要介绍如何编写一个脚本去启动java服务

脚本功能简介

1、启动脚本存放的路径为/data
2、编译好的jar包存放路径为/data/tencent_video/app
3、每个服务的路径为/data/tencent_video/service/服务名,该路径存放备份的jar包或者application.yml以及日志
4、执行启动脚本执行启动服务后,
(1)会将编译好的jar包备份到每个服务的对应路径,
(2)查询是该服务是否有存在进程,存在则停止该服务的进程
(3)执行对应的jar包启动命令

脚本内容

#!/bin/bash# 记录开始时间
start_time=$(date +%s)echo "执行脚本"PROJECT=${1:-all}
ALIYUN_REPO_TAG=$(date +%Y%m%d%H%M%S)
PROJ_LIST="task,report,gateway,order,user,information"echo "项目: $PROJECT"# 处理后端项目
function handle_jar_project() {local project=$1local jar_file_pattern=$2local nohup_params=$3# 使用通配符查找 JAR 文件jar_file=$(ls /data/tencent_video/app/$jar_file_pattern 2>/dev/null | tail -n 1)old_jar_file=$(ls /data/tencent_video/service/$project/$jar_file_pattern 2>/dev/null | tail -n 1) local jar_file_name=$(basename $jar_file)local old_jar_file_name=$(basename $old_jar_file)echo "查找到的 JAR 文件: $jar_file"echo "确保video-$PROJECT-*.jar 只有一个"if [ -f "$jar_file" ]; thenecho "备份文件为 /data/tencent_video/service/$project/$ALIYUN_REPO_TAG-$old_jar_file_name,请自行进入 /data/tencent_video/app/$project/ 删除"mv /data/tencent_video/service/$project/$old_jar_file_name /data/tencent_video/service/$project/$ALIYUN_REPO_TAG-$old_jar_file_namecp $jar_file /data/tencent_video/service/$project/if [ $? -eq 0 ]; thenecho "文件已成功拷贝到 /data/tencent_video/service/$project/"PID=$(pgrep -f $old_jar_file_name)echo "找到运行中的进程,进程ID为: $PID"if [[ -n  "$PID" ]]; thenecho "找到运行中的进程,进程ID为: $PID,现在将其终止."kill -9  $PID#wait $PID 2>/dev/nullecho "进程已终止."elseecho "未找到运行中的进程."fiecho "启动新的进程: nohup /usr/local/jdk-17.0.2/bin/java $nohup_params -jar /data/tencent_video/service/$project/$jar_file_name >> /data/tencent_video/service/$project/logs/app.log 2>&1 &"cd /data/tencent_video/service/$project/nohup /usr/local/jdk-17.0.2/bin/java $nohup_params -jar /data/tencent_video/service/$project/$jar_file_name >> /data/tencent_video/service/$project/logs/app.log 2>&1 &echo "新的 $project 进程已启动."elseecho "拷贝文件失败"fielseecho "文件 $jar_file 不存在, 没有新文件直接重启"PID=$(pgrep -f $old_jar_file_name)echo "进程ID为: $PID"if [[ -n "$PID" ]]; thenecho "找到运行中的进程,进程ID为: $PID,现在将其终止."kill -9  $PID echo "进程已终止."fiecho "启动新的进程: nohup /usr/local/jdk-17.0.2/bin/java $nohup_params -jar /data/tencent_video/service/$project/$old_jar_file_name >> /data/tencent_video/service/$project/logs/app.log 2>&1 &"cd /data/tencent_video/service/$projectnohup /usr/local/jdk-17.0.2/bin/java $nohup_params -jar /data/tencent_video/service/$project/$old_jar_file_name >> /data/tencent_video/service/$project/logs/app.log 2>&1 &echo "新的 $project 进程已启动."fi
}# 处理特定项目
case $PROJECT intask|order|report|information)handle_jar_project "$PROJECT" "video-$PROJECT-*.jar" "--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED -Dspring.config.location=application.yml";;gateway|user)handle_jar_project "$PROJECT" "video-$PROJECT-*.jar" "-Dspring.config.location=application.yml";;*)echo "[ERROR]: Cannot find proj_name: ${PROJECT}, please check it first."echo "Allowed proj_name list: [${PROJ_LIST}].";;
esac# 记录结束时间
end_time=$(date +%s)# 计算脚本执行时间
elapsed_time=$((end_time - start_time))echo "脚本总耗时: $elapsed_time 秒"

启动脚本

[root@kksc-01 data]# ./tencent_video_start.sh task

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 提升职业竞争力,亚马逊云科技认证助你云端腾飞
  • 第1节 安装Flask
  • LeetCode.209.长度最小的子数组
  • uniapp 修复使用 uni.saveImageToPhotosAlbum 方法在部分安卓手机上保存失败
  • 生信分析:精准科研的幕后英雄,加速生物医学研究新进程
  • 其他自动重试的注解
  • 洛谷P1198.最大数
  • Voice agent connected!回顾一场 24 小时的黑客松
  • Cocos Creator通用关卡编辑器UniLevelEditor
  • AcWing-算法提高课(第一章)-下
  • 【经典算法】BFS_最短路问题
  • Linux文件属性和打包压缩详解
  • 模拟笔试:卡码网2023年快手笔试真题
  • 分组循环算法
  • 网络编程TCP与UDP
  • Apache的基本使用
  • exif信息对照
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • java 多线程基础, 我觉得还是有必要看看的
  • JavaScript设计模式与开发实践系列之策略模式
  • Java超时控制的实现
  • JSONP原理
  • rc-form之最单纯情况
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • Spark RDD学习: aggregate函数
  • vue 配置sass、scss全局变量
  • 阿里云前端周刊 - 第 26 期
  • 记一次用 NodeJs 实现模拟登录的思路
  • 前端工程化(Gulp、Webpack)-webpack
  • 悄悄地说一个bug
  • 智能合约开发环境搭建及Hello World合约
  • MPAndroidChart 教程:Y轴 YAxis
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 组复制官方翻译九、Group Replication Technical Details
  • ​什么是bug?bug的源头在哪里?
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • %check_box% in rails :coditions={:has_many , :through}
  • (145)光线追踪距离场柔和阴影
  • (152)时序收敛--->(02)时序收敛二
  • (70min)字节暑假实习二面(已挂)
  • (补)B+树一些思想
  • (多级缓存)多级缓存
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (学习日记)2024.01.09
  • (一)Dubbo快速入门、介绍、使用
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • 、写入Shellcode到注册表上线
  • .NET 8 跨平台高性能边缘采集网关
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)