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

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

  • 一、前言
  • 二、启动
    • 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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++类和对象】const成员函数及流插入提取

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

地图图源#ESRI ArcGIS XYZ Tiles系列(TMS)

目录 1、前言 2、地图图源网址 2.1、Satellite 卫星图源 2.2、Terrain 地形图源 2.3、Street 路网/标注图源 2.4、Specifity 特色设计图源 3、专业推荐”穿搭“ 4、图源配置下载及使用 图源名称图层类别特别注意谷歌 Google①地形 ②影像 ③矢量及标注 ④特色图源国内大…

Nessus【部署 03】Docker部署漏洞扫描工具Nessus详细过程分享(下载+安装+注册+激活)文末福利

Docker部署漏洞扫描工具Nessus 1.安装2.配置2.1 添加用户2.2 获取Challenge code2.3 获取插件和许可证2.4 注册 3.使用4.进阶 整体流程: 1.安装 # 1.查询镜像 docker search nessus# 2.拉取镜像 docker pull tenableofficial/nessus# 3.启动镜像【挂载目录用于放置…

【Java框架】Spring框架(一)——Spring基本核心(IOC/DI)

目录 Java企业级框架企业级系统EJB概念解析EJB与Spring的恩怨情仇 Spring系统架构1. Data Access/Integration(数据访问/集成)2. Web 模块3. Core Container(Spring 的核心容器)4. AOP、Aspects、Instrumentation 和 M…

冰达ROS机器人快速使用指南

欢迎来到《冰达ROS机器人极简使用指南》 Q:这份教程适合谁? A:适合完全0基础新手,需要快速跑起来机器人的基本功能。也适合技术大佬需要快速的了解冰达ROS机器人的使用方法。 Q:这份教程内容很少,是不是…

迅雷下载不了的资源怎么下载?

我想下载Boost库,但是下载不下来 用迅雷下载是一直卡在0k 后来尝试在centos上用wget进行下载,竟然可以 wget https://boostorg.jfrog.io/artifactory/main/release/1.85.0/source/boost_1_85_0.tar.gz

信息打点--语言框架

指纹识别 后端 CMS:一般php开发居多源码程序,其他语言也存在,但不易识别(利用源码程序名去搜漏洞情况,源码下载进行后期的代码审计) 前端 js框架(爬取更多的js从里面筛选URL或敏感泄露key)等…

docker-compose 安装MongoDB续:创建用户及赋权

文章目录 1. 问题描述2. 分析2.1 admin2.2 config2.3 local 3. 如何连接3.解决 1. 问题描述 在这一篇使用docker-compose创建MongoDB环境的笔记里,我们创建了数据库,但是似乎没有办法使用如Robo 3T这样的工具去连接数据库。连接的时候会返回这样的错误&…

C++参考手册使用说明

C参考手册使用说明 文章目录 C参考手册使用说明1 为什么要使用C参考手册2 网站3 C参考手册离线格式4 C参考手册使用说明1.1 离线C参考手册下载1.2 html离线C参考手册1.3 chm离线C参考手册1.4 linux安装包C参考手册(只有英文版本)1.5 qch离线C参考手册 更…

2 逻辑斯蒂回归(分类)

目录 1 理论 逻辑回归假设数据服从伯努利分布(二分类),通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。 逻辑斯蒂回归(Logistic Regression)是一种用于解决分类问题的…

MySQL下载与安装

文章目录 1:MySQL下载与安装2:配置环境变量3:验证是否安装成功 1:MySQL下载与安装 打开MySQL官网,MySQL 下载链接选择合适的版本和操作系统,页面跳转之后选择No thanks, just start my download.等待下载即…

seatable部署之后network error【seatable】

这里写自定义目录标题 问题汇总 问题汇总 seatable服务部署后,组件显示正常运行,创建表单,显示Network error 点击错误信息,查看其跳转至另一个页面

详解JVM类加载

从类被加载到虚拟机内存中开始,到释放内存总共有7个步骤:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Ini…

Jenkins构建实用场景指南

1 总体说明 本文主要介绍在研发实战时,通过Jenkins解决企业级软件构建打包一些实用场景。通常是在打包构建前,通过命令和工具进行预处理,避免修改源码,可按需配置构建任务,自动持续集成。 2 Jenkins简介 2.1 复制任务 研发实战创建构建任务,推荐从已有的构建任务进行…

项目管理-项目成本管理

目录 一、成本管理概述 二、成本估算 2.1 定义 2.2 成本估算方法 2.2.1 自顶向下的估算 2.2.1.1 估算方法 2.2.1.2 优点 2.2.1.3 缺点 2.2.2 自底向上的估算 2.2.2.1 估算方法 2.2.2.2 优点 2.2.2.3 缺点 2.2.3 差别估算法 三、成本预算 3.1 定义 3.2 成本预算的…

vue+springboot+mybatis-plus改装

①添加依赖 <!-- mybatis-plus --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.2</version> </dependency> pom.xml: <?xml version"…

springboot+java照相馆预约管理系统ssm

框架&#xff1a;ssm/springboot都有 jdk版本&#xff1a;1.8 及以上 ide工具&#xff1a;IDEA 或者eclipse 数据库: mysql 编程语言: java 前端&#xff1a;layuibootstrapjsp 详细技术&#xff1a;HTMLCSSJSjspspringmvcmybatisMYSQLMAVENtomcat 开发工具 IntelliJ IDEA: 一…

Oracle解析exp、imp及常见的问题

前言 在工作中经常需要不同数据库的导入和导出。exp和imp可以实现数据的迁移。 exo会转储产生对应的二进制文件,里面包括数据的定义信息、数据内容等,即为dump文件。 下面是使用exp和imp的一些场景 exp和imp主要有4中模式: 1)数据库模式 数据库模式也就是我们说的全备…

五分钟手撕“三大特性”<继承>(下)

目录 一、protected 关键字 二、继承方式 三、final 关键字 四、子类的构造方法 五、this和super &#xff08;一&#xff09;相同点&#xff1a; &#xff08;二&#xff09;不同点&#xff1a; 六、代码块的执行先后 一、protected 关键字 在类与对象中提到过&…

二维码门楼牌管理应用平台建设:网格化管理的新篇章

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、二维码门楼牌管理应用平台的功能特点三、二维码门楼牌管理应用平台的实际应用四、二维码门楼牌管理应用平台的前景展望 前言 随着信息技术的飞速发展&#xff0c;二维码门楼牌管理应用平台的建设已成为城市网格化管理…