手把手教你写一个Shell脚本部署你的服务
我们都知道,在开发的过程中,有很多部署自己微服务的方式,其中有各种各样的不同操作,比如使用 docker 打包为镜像的方式,还有基础使用 jar 包的方式进行部署,但是呢?使用 jar 包部署,那就离不开这个启动 jar 包的脚本命令,总不能每次都是直接自己手动杀端口,然后再重新启动吧,今天了不起来带大家看一下这个 Shell 脚本,并且写一个 Shell 脚本通用给大家,拿来可用。
如果想直接拿这个脚本改一下用的,不想看这个基础内容的,可以直接拉到最后了。、
- 查看自己当前系统默认的 Shell
echo $SHELL
输出:/bin/bash
- 查看系统支持的Shell
cat /etc/shells
输出:
/bin/sh /bin/bash /usr/bin/sh /usr/bin/bash
也就是说,我们的云服务器是支持我们在这里给他安排 Shell 脚本的
我们这时候先来安排一下 sh 的文件,创建一个文件夹,然后在其中创建一个 sh 的文件。
mkdir /usr/local/shelltesttouch test.sh
创建完成我们编辑一下内容
vim test.sh#!/bin/bash
echo "Hello World Shell"
然后我们出来运行一下我们的 Shell 的第一个脚
bash test.sh
出来的结果是 Hello World Shell.
我们知道其实 Shell脚本没那么复杂,一个启动 jar 包的启动,可能用到的用法就一些,我们来看一下另外的几个必备的语法
if ...
then...
else...
fi
接下来我们看一段脚本,来根据脚本分析
start() {echo ""pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')if [ -z $pid ]; thencd $jar_path # 这里转到jar包目录执行命令,是为了使用jar_path下的config文件,貌似java程序只能识别当前执行命令目录下的配置,否则就是使用已打入Jar包的配置文件。nohup java -jar $jar_name >$log_path 2>&1 &pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')echo "应用 ${jar_name}启动成功,pid=${pid}"# tail -f $log_pathelseecho "应用 ${jar_name} 正在运行,pid = ${pid}"fiecho ""
}
start() 顾名思义,这明显就是一个 start 方法,方法体的内容则是花括号内的内容。
echo 我们都知道了,就是输出个内容
ps -ef | grep
这个命令更不用多说了,那直接就是用来查询应用的端口号的,后面跟着我们的jar_name 实际上就是一个变量,直接获取的我们在方法外面定义的
后面的awk其实就相当于是信息的读入
也就是说,我们在执行 sh start.sh start 的方法的时候,然后会读取我们接下来输入的内容,接下来就进入了判断环节。
cd $jar_path # 这里转到jar包目录执行命令,是为了使用jar_path下的config文件,貌似java程序只能识别当前执行命令目录下的配置,否则就是使用已打入Jar包的配置文件。nohup java -jar $jar_name >$log_path 2>&1 & 这个则是我们最重要的启动Jar包的版本
nohup 这个命令的标识则是我们使用后台启动的方式,不必再关注如果执行jar -jar 的时候,我们关闭了当前的窗口,结果我们的服务就被迫终止了,而后面,我们还贴心的又查询了一下这个服务,然后把我们的服务是否启动成功给大家展示出来,如果运行之后,就会出现 应用xxx启动成功,pid = xxxxx的标志了。
看完了我们的启动命令,接下来就得看我们的停止命令了。
stop() {echo ""pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')if [ -z $pid ]; then # -z 是判断是否为空echo "${jar_name}未运行!"elseecho "准备关闭进程$pid"kill -9 $pidsleep 0.5echo "${jar_name}已关闭!"fiecho ""
}
这个stop的方法几句比较简单了,接受收入内容,然后判断这个 jar 包是否在运行当中,如果运行的话,那么找到这个端口,然后关闭到这个进程号,最后给我们输出一个 xxxx已关闭
我们再来看一个重启的方法:
restart() {stopsleep 2echo "停止完成,准备启动jar包"start
}
这个更不用说了,我们写了 start 和 stop 只要在这个 restart里面去执行一下这个 stop 然后等待一会,然后再启动就完事了。
完整的脚本如下
#替换成你的jar包
jar_name=cloud-ui-zhiyikeji.jar
jar_path=/usr/webjar/
log_path=/usr/webjar/logs/`date +%y-%m-%d`_out.log
#指向自定义jdk
#export JAVA_HOME=/usr/jdk/jdk1.8.0_381
#export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#export PATH=$JAVA_HOME/bin:$PATH
stop() {echo ""pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')if [ -z $pid ]; then # -z 是判断是否为空echo "${jar_name}未运行!"elseecho "准备关闭进程$pid"kill -9 $pidsleep 0.5echo "${jar_name}已关闭!"fiecho ""
}start() {echo ""pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')if [ -z $pid ]; thencd $jar_path # 这里转到jar包目录执行命令,是为了使用jar_path下的config文件,貌似java程序只能识别当前执行命令目录下的配置,否则就是使用已打入Jar包的配置文件。nohup java -jar $jar_name >$log_path 2>&1 &pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')echo "应用 ${jar_name}启动成功,pid=${pid}"# tail -f $log_pathelseecho "应用 ${jar_name} 正在运行,pid = ${pid}"fiecho ""
}status() {echo ""pid=$(ps -ef | grep $jar_name | grep -v grep | awk '{print $2}')if [ -z $pid ]; thenecho "应用 ${jar_name} 未运行"elseecho "应用 ${jar_name} 正在运行,pid = ${pid}"fiecho ""}
restart() {stopsleep 2echo "停止完成,准备启动jar包"start
}
action() {echo "请输入数字选择要执行的操作:1=启动,2=重启,3=停止,4=查看运行状态,5=退出"echo '你输入的数字为:'read acase $a in"1")start;;"2")restart;;"3")stop;;"4")status;;"5")exit 1;;*)echo "输入错误,请重新输入"action;;esac
}
action
脚本奉上,我们需要做的就是更改一下前面的jar包的路径已经jar包的相关内容即可实现shell脚本来启动自己的jar包了。
希望对大家有用。
相关文章:
手把手教你写一个Shell脚本部署你的服务
我们都知道,在开发的过程中,有很多部署自己微服务的方式,其中有各种各样的不同操作,比如使用 docker 打包为镜像的方式,还有基础使用 jar 包的方式进行部署,但是呢?使用 jar 包部署,…...
银行数字化产品方案
在互联网及金融科技公司快速发展的时代背景下,银行客户普遍都意识到了自己在客户体验、客户洞察、产品服务方面受到的来自互联网的挑战 。为了更好地面对各方面的挑战,传统的业务模式必须革新。传统银行都在积极进行数字化转型。同时,也要面对…...
C# datagridview控件 绑定数据库中表中数据的方式-3
1.如下图所示,为数据库中的一张表结构,注意该表中共有11个字段 2.首先在窗体后台代码中拖入一个datagridview控件,并在窗体加载时,给datagridview控件添加列,添加的方式如下所示:请注意,每个列…...
Amazon CodeWhisperer 正式发布可免费供个人使用
文章作者:sunny 亚马逊云科技日前推出了实时 AI 编程助手 Amazon CodeWhisperer,包括个人套餐和专业套餐,所有开发人员均可免费使用个人套餐。Amazon CodeWhisperer 让开发人员能够保持专注、高效,帮助他们快速、安全地编写代码&a…...
el-table根据返回数据回显选择复选框
接口给你返回一个集合,然后如果这个集合里面的status2,就把这一行的复选框给选中 注意: 绑定的ref :row-key"getRowKeys" this.$refs.multiTableInst.toggleRowSelection(this.list[i], true); <el-table :data"list"…...
代码随想录算法训练营第四十二天 _ 动态规划_01背包问题。
学习目标: 动态规划五部曲: ① 确定dp[i]的含义 ② 求递推公式 ③ dp数组如何初始化 ④ 确定遍历顺序 ⑤ 打印递归数组 ---- 调试 引用自代码随想录! 60天训练营打卡计划! 学习内容: 二维数组处理01背包问题 听起来…...
会话 cookie 及隐私的那些事
什么是会话 Cookie? 会话 Cookie 的概念非常简单。 会话 Cookie,也称为临时 Cookie 或内存 Cookie,是网站在浏览会话期间存储在用户计算机或设备上的小数据片段。 它是由网站生成并由您的浏览器存储和使用的多种 Cookie 之一。 常规 Cookie 或“持久”Cookie 是通常在您的…...
前端知识笔记(二十九)———MySQL通配符和正则表达式
一、通配符 1.% 匹配0,1,多个字符,但不匹配NULL 2._ 匹配单个字符 3.[charlist] 匹配字符列中的任何单一字符 4.[^charlist] 或 [!charlist] 匹配不在字符列中的任何单一字符 二、正则表达式 通配符的LIKE替换为REGEXP LIKE 匹配整个列&…...
C#网络编程(System.Net.Sockets命名空间)
目录 一、Socket类 1.示例源码 2.生成效果 二、TcpClient类和TcpListener类 1.示例源码 2.生成效果 三、UdpClient类 1.示例源码 2.生成效果 System.Net.Sockets命名空间主要提供制作Sockets网络应用程序的相关类,其中Socket类、TcpClient类、TcpListener类…...
linux 系统重装 ssh 连接失败
一.错误描述 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 二.解决方案 输入以下指令: ssh-keygen -R XXX(ip地址) 按照我的例子(ip:10.165.7.136),会返回以下信息: 重新尝试连…...
stream流操作List对象,指定属性,取差集、交集
差集 // 差集 (list1 - list2 list1 中不同数据)List<Person> reduce1 list1.stream().filter(a -> !list2.stream().map(b -> b.getAge() "&" b.getName()).collect(Collectors.toList()).contains(a.getAge() "&" a.getName()…...
计算机相关行业在大数据库时代下的潮流和趁势
还记得当初自己为什么选择计算机? 随着数据的爆炸性增长,数据科学和数据分析成为了热门的领域。这些专业涉及处理和分析大规模数据集的技术和方法,以从中提取有价值的信息和洞察。数据科学家和数据分析师在各个行业中的需求不断增加…...
Mac苹果视频剪辑:Final Cut Pro Mac
Final Cut Pro是一款由Apple公司开发的专业视频非线性编辑软件,是业界著名的视频剪辑软件之一。它最初发布于1999年,是Mac电脑上的一款独占软件。Final Cut Pro具有先进的剪辑工具、丰富的特效和颜色分级、音频处理等功能,使得用户可以轻松地…...
高德Map
使用 官网:JS API 结合Vue使用 npm i amap/amap-jsapi-loader --saveimport AMapLoader from amap/amap-jsapi-loader;marker的属性、事件、方法 https://lbs.amap.com/api/javascript-api-v2/documentation#marker 自定义marker 为创建的 Marker 指定自定义图…...
SSM新闻发布管理系统
SSM毕设分享 序号1:SSM新闻发布管理系统 1 项目简介 Hi,各位同学好,这里是郑师兄! 今天向大家分享一个毕业设计项目作品【SSM新闻发布管理系统】 师兄根据实现的难度和等级对项目进行评分(最低0分,满分5分) 难度系数…...
客户销售目标拆解:数据驱动的方法和策略
写在开头 在当今竞争激烈的商业环境中,企业需要更加精准地制定销售目标以实现业务增长。数据驱动的方法在这一过程中扮演着关键的角色,帮助企业深入了解客户特征、行为和需求。本篇博客将深入探讨销售目标拆解在企业管理中的重要性,并介绍如何利用数据驱动的方法和策略来制…...
“丝路电商”与泛欧在线公共采购平台Peppol
近期上海商务委员会公布《关于在上海市创建“丝路电商”合作先行区的方案》(以下简称方案),方案中提出:“全面贯彻落实党的二十大精神,立足新发展阶段,完整、准确、全面贯彻新发展理念,加快构建…...
今日思考 -- 创新领导力(CIO)读后感
收获3个观点: 1 ,IT DT 商业,才是未来IT人的出路之一 ! 2 ,在CXO中,CIO像CEO一样,具备了整个企业的业务全视角 ,同时也更具解决 ‘’系统性‘’问题的能力 ! 3 &…...
Python实现Excel自动化
个人网站 文章首发于公众号:小肖学数据分析 Excel是办公自动化的关键工具之一,用于数据存储、处理和分析。 Python通过 openpyxl 库,提供了强大的Excel操作能力,让我们可以读取、写入、修改和创建复杂的Excel文件。 安装 open…...
WT2605-24SS高品质录音语音芯片:实现五种变音效果,为音频应用增添无限创意
在音频技术的世界里,录音芯片作为声音处理和传输的核心部件,一直以来都承载着人们对高品质音频的追求。而唯创知音推出的WT2605-24SS高品质录音语音芯片则在此基础上更进一步,带来了五种独特的变音效果,为音频应用注入了无限的创意…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
