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

embedded/2024/9/22 17:05:34/

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

  • 一、前言
  • 二、启动
    • 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 5secho "start ruoyi-modules-file..."
nohup java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/file/ruoyi-modules-file.jar >  ./ruoyi-modules-file.log &
sleep 10secho "start ruoyi-modules-system..."
nohup java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/system/ruoyi-modules-system.jar >  ./ruoyi-modules-system.log &
sleep 20secho "start ruoyi-auth..."
nohup java -jar -Xms256m -Xmx256m /www/wwwroot/equip/jar/auth/ruoyi-auth.jar >  ./ruoyi-auth.log &
sleep 10secho "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[@]};
donohup $command &sleep 10s
doneecho "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}" == "" ]; thenecho "process $var not exists"else# 杀掉进程kill -9 $pidecho "process $var killed success"fi
done

保存退出。

3、关闭

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

sh stop-test.sh

在这里插入图片描述


http://www.ppmy.cn/embedded/7013.html

相关文章

欧拉公式;傅里叶变换;自然数e;虚数

目录 欧拉公式 从X轴观察室Sin 从y轴观察室cos 单位时间t转一圈:2pai*t 矢量和标量

HarmonyOS Next 视频弹幕功能

视频弹幕功能 介绍 本示例介绍如何使用ohos.danmakuflamemaster和ohos.gsyvideoplayer开发支持视频弹幕的播放器。可以自定义弹幕样式、占据屏幕宽度,发送弹幕,开关弹幕视图。 效果图预览 使用说明 点击播放按钮,进行视频播放&#xff0c…

基于python网络爬虫的二手房源数据采集及可视化分析的设计与实现

基于python网络爬虫的二手房源数据采集及可视化分析的设计与实现 Design and Implementation of Data Collection and Visualization Analysis of Second-hand Housing Listings Based on Python Web Scraping 完整下载链接:基于python网络爬虫的二手房源数据采集及可视化分析…

Postman之全局变量与环境变量配置

实际开发中可能需要不停切换环境,接口中来回输入环境地址比较麻烦,故而通过定义变量来节约频繁更换测试地址所耗费的时间。Postman 允许定义自己的全局变量(Globals)与环境变量(Environment),最…

[论文笔记]Root Mean Square Layer Normalization

引言 今天带来论文Root Mean Square Layer Normalization的笔记,论文题目是均方根层归一化。 本篇工作提出了RMSNorm,认为可以省略重新居中步骤。 简介 层归一化对Transformer等模型非常重要,它可以帮助稳定训练并提升模型收敛性&#xf…

Openlayers动态刷新Arcgis MapServer服务图层

Openlayers动态刷新Arcgis MapServer服务图层 最近做一个图层编辑的功能,在前端新增一个图块之后需要刷新Arcgis切片服务,实时显示效果。刚开始使用source的refresh方法,结果不生效,后来在source上更新一个时间戳参数实现了刷新切…

WAF攻防-权限控制代码免杀异或运算变量覆盖混淆加密传参

知识点 1、脚本后门基础&原理 2、脚本后门查杀绕过机制 3、权限维持-覆盖&传参&加密&异或等 章节点: WAF绕过主要集中在信息收集,漏洞发现,漏洞利用,权限控制四个阶段。 代码表面层免杀-ASP&PHP&JSP&a…

微软搭建零售新媒体创意工作室大举抢占数字营销广告市场

“微软新零售创意工作室新平台利用生成式人工智能,在几秒钟内轻松定制横幅广告。零售媒体预计到2026年将成为一个价值1000亿美元的行业。” 零售媒体在过去几年中发展迅速。根据eMarketerOpens在新窗口的数据,预计到2024年,仅美国的零售媒体…