使用脚本启动和关闭微服务

news2024/9/24 11:29:02

使用脚本启动和关闭微服务

  • 一、前言
  • 二、启动
    • 1、处理每个服务
    • 2、编写启动脚本
    • 3、其他启动脚本(无效,有兴趣可以看看)
    • 4、启动
  • 三、关闭
    • 1、测试拿服务进程id的命令是否正确
    • 2、编写关闭脚本
    • 3、关闭

一、前言

假如在服务器中部署微服务不使用 docker ,一个一个地启动服务感觉比较繁琐,就想着能不能使用一个命令实现一键启动,这里以微服务版的若依为例。

二、启动

思路是挨个启动服务,然后将命令放到脚本文件,简化后续的启动。

1、处理每个服务

这里以处理 gateway 模块为例,打包后的名称为 ruoyi-gateway.jar ,将它上传到服务器的 /www/wwwroot/equip/jar/gateway 目录,所以 gateway 模块的启动命令为:

nohup java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/gateway/ruoyi-gateway.jar >  ./ruoyi-gateway.log &

解释:

“nohup”:用于确保指定的命令或程序即使在用户退出终端或关闭终端的情况下,也能在后台继续运行,配合最后面的 & 使用。
“-Xms256m”:设置初始堆为256m。
“-Xmx256m”:设置最大堆为256m。
“> ./ruoyi-gateway.log”:将服务日志输出到名为 ruoyi-gateway.log 的文件中,重启会覆盖日志。不加这个会把日志输出到名为 nohup.out 的文件中。

因为服务器内存只有8g,如果不做堆大小的限制,所有服务启动后会把服务器内存占满,这里对 gateway 的初始堆和最大堆限制为256m。

处理好命令后先执行一下命令能否正常使用,如下图所示:

在这里插入图片描述

确定命令没有问题时,记录一下服务启动所需时间,后面有用,其他服务也是类似处理。

2、编写启动脚本

这里已经处理好了所有的服务启动命令,创建一个 .sh 的脚本文件,这里名为 start-test.sh ,命令如下:

touch start-test.sh

在这里插入图片描述

然后加入前面处理好的命令,这是我的:

# 被调用的服务要先启动,根据启动时间设置命令执行的间隔

echo "start ruoyi-gateway..."
nohup java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/gateway/ruoyi-gateway.jar >  ./ruoyi-gateway.log &
sleep 5s

echo "start ruoyi-modules-file..."
nohup java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/file/ruoyi-modules-file.jar >  ./ruoyi-modules-file.log &
sleep 10s

echo "start ruoyi-modules-system..."
nohup java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/system/ruoyi-modules-system.jar >  ./ruoyi-modules-system.log &
sleep 20s

echo "start ruoyi-auth..."
nohup java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/auth/ruoyi-auth.jar >  ./ruoyi-auth.log &
sleep 10s

echo "start finish"

注意:

不能将初次创建好的脚本文件 start-test.sh 下载到本地编辑,再上传到服务器,会报换行符的问题。应该直接在服务器中编辑文件,或在本地编辑好内容后拷贝到服务器文件。

因为我将若依的服务调用方式改为了 dubbo ,要保证生产者先启动完成,所以就记录了服务的启动时间作为服务启动间的时间间隔。

3、其他启动脚本(无效,有兴趣可以看看)

上面的命令看起来差点意思,但至少能正常启动。

原本想做到循环里面遍历启动,但因为服务启动时间的不确定性,经常消费者先于生产者启动,启动完 gateway 模块其他就没反应了,就没有使用那种方式,有兴趣的小伙伴也可以研究一下,这是文件内容:

# 定义数组,方式一
# 使用这种方式注意每个元素后面不能加“,”
# 使用“``”包住命令不会将命令中的空格换行
command_array=(
       `java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/gateway/ruoyi-gateway.jar >  ./ruoyi-gateway.log`
       `java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/file/ruoyi-modules-file.jar >  ./ruoyi-modules-file.log`
       `java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/system/ruoyi-modules-system.jar >  ./ruoyi-modules-system.log`
       `java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/auth/ruoyi-auth.jar >  ./ruoyi-auth.log`)

# 定义数组,方式二
#command_array[0]=`java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/gateway/ruoyi-gateway.jar >  ./ruoyi-gateway.log`
#command_array[1]=`java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/auth/ruoyi-auth.jar >  ./ruoyi-auth.log`
#command_array[2]=`java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/file/ruoyi-modules-file.jar >  ./ruoyi-modules-file.log`
#command_array[3]=`java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/system/ruoyi-modules-system.jar >  ./ruoyi-modules-system.log`

echo "starting..."

for command in ${command_array[@]};
do
   nohup $command &
   sleep 10s
done

echo "start finish"

4、启动

在脚本文件所在目录,这里为 start-test.sh 文件所在目录,执行如下命令:

sh start-test.sh

在这里插入图片描述

三、关闭

思路是拿到每个服务的进程id,再杀死对应的进程。

1、测试拿服务进程id的命令是否正确

这里只是测试拿到进程id的命令是否正确,任选一个服务测试即可。

还是以 gateway 为例,查询对应的进程id,命令如下:

 ps -ef | grep /www/wwwroot/equip/jar/gateway/ruoyi-gateway.jar

在这里插入图片描述

第二列的就是我们需要的进程id,只要那个就行了,可以使用如下命令:

ps aux | grep /www/wwwroot/equip/jar/gateway/ruoyi-gateway.jar | grep -v grep | awk '{print $2}'

在这里插入图片描述

不会输出第二列的进程id,只是看看命令有没有错误。

或者可以使用如下命令:

ps -ef | grep -w /www/wwwroot/equip/jar/gateway/ruoyi-gateway.jar | grep -v grep | awk '{print $2}'

在这里插入图片描述

2、编写关闭脚本

创建一个 .sh 的脚本文件,这里名为 stop-test.sh ,命令如下:

touch stop-test.sh

然后加入如下内容:

# 定义数组,方式一
# 使用这种方式注意每个元素后面不能加“,”
array=("/www/wwwroot/equip/jar/gateway/ruoyi-gateway.jar"
       "/www/wwwroot/equip/jar/auth/ruoyi-auth.jar"
       "/www/wwwroot/equip/jar/file/ruoyi-modules-file.jar"
       "/www/wwwroot/equip/jar/system/ruoyi-modules-system.jar")

# 定义数组,方式二
#array[0]="/www/wwwroot/equip/jar/gateway/ruoyi-gateway.jar"
#array[1]="/www/wwwroot/equip/jar/auth/ruoyi-auth.jar"
#array[2]="/www/wwwroot/equip/jar/file/ruoyi-modules-file.jar"
#array[3]="/www/wwwroot/equip/jar/system/ruoyi-modules-system.jar"

for var in ${array[@]};
do
  # 获取进程id,方式一
  pid="ps aux | grep $var | grep -v grep | awk '{print \$2}'"

  #  获取进程id,方式二
  # pid="ps -ef | grep -w $var | grep -v grep | awk '{print \$2}'"

  # eval 会对后面的命令进行两遍扫描。如果第一遍扫描后,命令是个普通命令,则执行此命令;
  # 如果命令中含有变量的间接引用,则保证间接引用的语义。
  # 也就是说,eval 命令将会首先扫描命令行进行所有的置换,然后再执行该命令。因此,eval命令适用于那些一次扫描无法实现其功能的变量。
  pid=$(eval $pid)

  # 判断进程id是否为空,若不为空,则杀掉进程
  if [ "${pid}" == "" ]; then
      echo "process $var not exists"
  else
      # 杀掉进程
      kill -9 $pid
      echo "process $var killed success"
  fi
done

保存退出。

3、关闭

在脚本文件所在目录,这里为 stop-test.sh 所在目录,执行如下命令:

sh stop-test.sh

在这里插入图片描述

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

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

相关文章

ElasticSearch:基础操作

一、ES的概念及使用场景 ElasticSearch是一个分布式,高性能、高可用、可伸缩、RESTful 风格的搜索和数据分析引擎。通常作为Elastic Stack的核心来使用 我们通过将ES 和 mysql对比来更好的理解 ES,ES和mysql相关的基本概念的对比表格如下: …

从Linux角度具体理解程序翻译过程-----预处理、编译、汇编、链接

前言: 在C语言中,我们知道程序从我们所写的代码到可执行执行的过程中经历了以下过程 1.预处理 2.编译 3.汇编 4.链接 可以通过下图来理解 翻译过程 1.预处理 该过程主要进行以下操作: (1)头文件的包含 (2)define定义符号的替换&#xff…

稀碎从零算法笔记Day52-LeetCode:从双倍数组中还原原数组

题型:数组、贪心 链接:2007. 从双倍数组中还原原数组 - 力扣(LeetCode) 来源:LeetCode 题目描述 一个整数数组 original 可以转变成一个 双倍 数组 changed ,转变方式为将 original 中每个元素 值乘以 …

EFK架构部署

7.17版本 准备工作 配置域名 cat >> /etc/hosts <<EOF 192.168.199.149 elk149daidaiedu.com 192.168.199.150 elk150daidaiedu.com 192.168.199.155 elk155daidaiedu.com EOF 修改主机名 hostnamectl set-hostname elk155.daidaiedu.com 免密登录 ssh-keyge…

# 从浅入深 学习 SpringCloud 微服务架构(一)基础知识

从浅入深 学习 SpringCloud 微服务架构&#xff08;一&#xff09;基础知识 1、系统架构演变&#xff1a; 1&#xff09;单体应用架构。如电商项目。 用户管理、商品管理、订单管理&#xff0c;在一个模块里。 优点&#xff1a;开发简单&#xff0c;快速&#xff0c;适用于…

VScode远程连接虚拟机提示: 无法建立连接:XHR failed.问题解决方案

一问题描述 在vscode下载插件Remote-SSH远程连接虚拟机时提示无法建立连接 二.最大嫌疑原因&#xff1a; 我也是在网上找了许久&#xff0c;发现就是网络原因&#xff0c;具体不知&#xff0c;明明访问别的网页没问题&#xff0c;就是连不上&#xff0c;然后发现下载vscode的…

前端CSS基础4(像素,颜色,字体属性大小复合属性)

前端CSS基础4&#xff08;像素&#xff0c;颜色&#xff0c;字体属性大小复合属性&#xff09; CSS代码编写位置CSS像素CSS颜色CSS常用字体属性和大小字体的复合属性 CSS代码编写位置 在HTML文件的头部使用 <head><style>/* 在这里编写CSS代码 */</style> …

Meta Llama 3强势来袭:迄今最强开源大模型,性能媲美GPT-4

前言 Meta的最新语言模型Llama 3已经发布&#xff0c;标志着在大型语言模型&#xff08;LLM&#xff09;领域的一次重大突破&#xff0c;其性能在行业内与GPT-4相媲美。此次更新不仅提升了模型的处理能力和精确性&#xff0c;还将开源模型的性能推向了一个新的高度。 Huggingf…

从0开始学人工智能测试节选:Spark -- 结构化数据领域中测试人员的万金油技术(二)

Dataframe dataframe 是spark中参考pandas设计出的一套高级API&#xff0c;用户可以像操作pandas一样方便的操作结构化数据。毕竟纯的RDD操作是十分原始且麻烦的。而dataframe的出现可以让熟悉pandas的从业人员能用非常少的成本完成分布式的数据分析工作&#xff0c; 毕竟跟数据…

数仓建模—数仓架构发展史

数仓建模—数仓架构发展史 时代的变迁&#xff0c;生死的轮回&#xff0c;历史长河滔滔&#xff0c;没有什么是永恒的&#xff0c;只有变化才是不变的&#xff0c;技术亦是如此&#xff0c;当你选择互联网的那一刻&#xff0c;你就相当于乘坐了一个滚滚向前的时代列车&#xf…

电视音频中应用的音频放大器

电视机声音的产生原理是将电视信号转化为声音&#xff0c;然后通过扬声器将声音播放出来。当我们打开电视并选择频道时&#xff0c;电视机首先从天线或有线电视信号中获取声音信号。声音信号经过放大器放大之后&#xff0c;就能够通过扬声器发出声音。电视机声音的产生原理和音…

Ubuntu20.04 ISAAC SIM仿真下载使用流程(4.16笔记补充)

机器&#xff1a;华硕天选X2024 显卡&#xff1a;4060Ti ubuntu20.04 安装显卡驱动版本&#xff1a;525.85.05 参考&#xff1a; What Is Isaac Sim? — Omniverse IsaacSim latest documentationIsaac sim Cache 2023.2.3 did not work_isaac cache stopped-CSDN博客 Is…

2024蓝桥杯每日一题(最短路径)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;奶牛回家 试题二&#xff1a;Dijkstra求最短路 II 试题三&#xff1a;spfa求最短路 试题四&#xff1a;作物杂交 试题一&#xff1a;奶牛回家 【题目描述】 晚餐时间马上就到了&#x…

【JavaEE多线程】Thread类及其常见方法(上)

系列文章目录 &#x1f308;座右铭&#x1f308;&#xff1a;人的一生这么长、你凭什么用短短的几年去衡量自己的一生&#xff01; &#x1f495;个人主页:清灵白羽 漾情天殇_计算机底层原理,深度解析C,自顶向下看Java-CSDN博客 ❤️相关文章❤️&#xff1a;清灵白羽 漾情天…

【opencv】dnn示例-segmentation.cpp 通过深度学习模型对图像进行实时语义分割

模型下载地址&#xff1a; http://dl.caffe.berkeleyvision.org/ 配置文件下载&#xff1a; https://github.com/opencv/opencv_extra/tree/4.x/testdata/dnn 该段代码是一个利用深度学习进行语义分割的OpenCV应用实例。下面将详细解释代码的功能和方法。 引入库 引入了一些必要…

蓝桥杯2024年第十五届省赛真题-宝石组合

思路&#xff1a;参考博客&#xff0c;对Ha,Hb,Hc分别进行质因数分解会发现&#xff0c;S其实就等于Ha&#xff0c;Hb&#xff0c;Hc的最大公约数&#xff0c;不严谨推导过程如下&#xff08;字丑勿喷&#xff09;&#xff1a; 找到此规律后&#xff0c;也不能枚举Ha&#xff…

Go 单元测试之mock接口测试

文章目录 一、gomock 工具介绍二、安装三、使用3.1 指定三个参数3.2 使用命令为接口生成 mock 实现3.3 使用make 命令封装处理mock 四、接口单元测试步骤三、小黄书Service层单元测试四、flags五、打桩&#xff08;stub&#xff09;参数 六、总结6.1 测试用例定义6.2 设计测试用…

医学图像三维重建与可视化系统 医学图像分割 区域增长

医学图像的三维重建与可视化&#xff0c;这是一个非常有趣且具有挑战性的课题&#xff01;在这样的项目中&#xff0c;可以探索不同的医学图像技术&#xff0c;比如MRI、CT扫描等&#xff0c;然后利用这些图像数据进行三维重建&#xff0c;并将其可视化以供医生或研究人员使用。…

解决Mac使用Vscode无法调用外部终端

前言 今天遇到一个很奇怪的问题&#xff0c;之前好好的用Vscode还能调用外部终端&#xff0c;怎么今天不行了&#xff1f;问题出在哪里呢&#xff1f;请听我娓娓道来。 检查配置文件 我查看了一下配置文件&#xff0c;发现配置文件都是调用外部控制台&#xff0c;没毛病啊。 …

Objective-C网络数据捕获:使用MWFeedParser库下载Stack Overflow示例

概述 Objective-C开发中&#xff0c;网络数据捕获是一项常见而关键的任务&#xff0c;特别是在处理像RSS源这样的实时网络数据流时。MWFeedParser库作为一个优秀的解析工具&#xff0c;提供了简洁而强大的解决方案。本文将深入介绍如何利用MWFeedParser库&#xff0c;以高效、…