【Java】 Shell 重启 SpringBoot 项目脚本(含服务守护)

简介

本文介绍了如何使用 Bash 脚本来管理和守护运行服务。将展示一个示例脚本,该脚本可以停止、启动和守护运行一个服务,并提供了相应的解释和用法说明。

在实际的软件开发和部署过程中,经常需要使用脚本来管理和控制服务的运行。这些脚本可以方便地停止、启动和监控服务,并在服务意外停止时自动重新启动。在本文中,将展示一个使用 Bash 脚本来管理和守护运行服务的示例。

步骤

首先,看一下示例脚本的结构和关键部分。以下是示例脚本的完整代码:

#!/bin/bashJAR=your_service.jar
LOG_FILE=your_service_log_file.logSERVER_HOST=localhost
SERVER_PORT=9998# 停止服务
function stopServer(){# 检查进程是否正在运行pid=$(ps -ef | grep "$JAR" | grep -v grep| awk '{print $2}')if [ -n "$pid" ]; then# 杀死进程kill -9 $pidecho "服务已停止"elseecho "服务未运行"fi
}# 启动服务
function startServer(){# 启动服务nohup java -jar "$JAR" > "$LOG_FILE" 2>&1 &echo "服务正在启动……"# 检测服务是否启动sleep 10while ! nc -z "$SERVER_HOST" "$SERVER_PORT"; do sleep 2; doneecho "服务启动成功"sleep 3}# 守护
function daemonFun(){# 进入循环,定期检查服务状态while true; do# 检查进程是否正在运行pid=$(ps -ef | grep "$JAR" | grep -v grep| awk '{print $2}')if [ -n "$pid" ]; then# 服务正在运行,等待一段时间后再次检查echo "服务正在运行,等待一段时间后再次检查"sleep 60else# 服务已停止,启动服务startServer waitecho "服务已重新启动"fidone
}stopServer waitsleep 3startServer wait# 启动守护
echo "启动守护"
daemonFun  &

以下逐步解释脚本的不同部分。

  • 首先,定义了一些变量,例如 JAR 表示服务的 JAR 文件名,LOG_FILE 表示日志文件名,SERVER_HOSTSERVER_PORT 表示服务的主机和端口。

  • 接下来,定义了 stopServer 函数,用于停止服务。该函数会检查服务进程是否正在运行,如果是,则使用进程 ID 杀死该进程。

  • 然后,定义了 startServer 函数,用于启动服务。该函数会使用 nohup 命令在后台运行服务,并将输出重定向到日志文件。然后,它会等待一段时间,检测服务是否成功启动。

  • 接着,定义了 daemonFun 函数,用于守护运行服务。该函数会进入一个无限循环,定期检查服务的状态。如果服务进程不存在,则重新启动服务。

在主程序中,首先调用 stopServer 函数停止可能正在运行的服务,并等待一段时间。接下来,调用 startServer 函数启动服务,并再次等待一段时间。
最后,打印一条消息表示守护进程正在启动,并调用 daemonFun 函数在后台运行守护进程。

以上脚本可以方便地停止、启动和守护运行一个服务。你可以根据自己的实际需求修改脚本中的变量和函数,以适应特定的服务和环境。

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

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

相关文章

NOIP2015提高组第二轮T1:能量项链

题目链接 [NOIP2006 提高组] 能量项链 题目描述 在 Mars 星球上,每个 Mars 人都随身佩带着一串能量项链。在项链上有 N N N 颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子&#xff0…

网络和Linux网络_4(应用层)序列化和反序列化(网络计算器)

目录 1. 重新理解协议 2. 网络版本计算器 2.1 前期封装 Log.hpp sock.hpp TcpServer.hpp 第一次测试(链接) 2.2 计算器实现 第二次测试(序列化和反序列化) 第三次测试(客户端字节流) CalServer.cc CalClient.cc 3. 守护进程 3.1 守护进程和前后台进程 3.1 变成…

数组扩展方法(一)

Array.prototype.forEach MDN解释forEach()方法是对数组的每个元素执行一个给定的函数,换句话来说就是在调用forEach()方法的时候,需要传入一个回调函数callback,循环每个数组内部元素时都会执行一次传入的回调函数callback forEach()方法的…

有哪些免费好用的API接口,一文告诉你

实名认证(身份证二要素):核验身份证二要素(姓名和身份证号码)信息是否一致。 实人认证(人像三要素):输入姓名、身份证号码和一张人脸照片,与公安库身份证头像进行权威比…

AUTOSAR实战篇:基于ETAS工具链的信息安全协议栈集成指南

AUTOSAR实战: 基于ETAS工具链的信息安全协议栈集成指南 前言 小T出品,必是精品! 手把手带你集成信息安全协议栈,你值得拥有! 正文 随着汽车信息安全的不断发展与完善,其在汽车电子领域如智能驾驶(ADAS),智能座舱等方向上不断被重视起来,越来越多的Tier1,主机厂都在全面…

开发一款抖音小游戏大致的研发成本是多少

抖音小游戏开发成本的影响因素较多,包括开发团队规模、技术选型、功能复杂度、测试成本、运营成本等等。因此,具体的成本需要根据你的项目需求和规模来确定。一般来说,小游戏开发成本大致可以分为人力成本和设备成本两部分。 人力成本主要取…

LeetCode算法心得——爬楼梯(记忆化搜索+dp)

大家好,我是晴天学长,第二个记忆化搜索练习,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1)爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或…

Redis主从复制,哨兵和Cluster集群

主从复制: 主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份(和同步),以及对于读操作的负载均衡和简单的故障恢复。 缺陷:故障恢复无法自动化…

C# ReadOnlyRef Out

C# ReadOnly ReadOnly先看两种情况1.值类型2.引用类型 结论 Ref Out ReadOnly官方文档 ReadOnly 先看两种情况 1.值类型 当数据是值类型时,标记为Readonly时,如果再次设置值,会提示报错,无法分配到只读字段 public class A {pri…

Vue中Vue router和axios的封装使用。

模拟场景: 当用户登录后,后台会返回一个token给前端,前端下次进入首页后,会先判断token是否过期,如果过期自动进入登录页面。配置路由: 1.安装 npm install vue-router42.安装后在src目录下创建router文…

基于Springboot的美容院管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的美容院管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&a…

qt treeview 删除节点

Qt 中,要删除 QTreeView 中的节点,可以通过操作其模型(QAbstractItemModel)来实现。以下是一个简单的示例,展示如何从 QTreeView 中删除节点。 假设你有一个 QTreeView,它使用了 QStandardItemModel 作为模…

Redis(事务和持久化)(很重要!)

事务的定义: Redis中的事务是指一组命令的集合,这些命令可以在一个原子操作中执行。在Redis中,可以使用MULTI命令开始一个事务,然后使用EXEC命令来执行事务中的所有命令,或者使用DISCARD命令来取消事务。事务可以确保…

爬取春秋航空航班信息

一、使用fiddler爬取小程序春秋航空航班信息 使用Fiddler爬取春秋航空微信小程序(手机上由于网络问题,无法进入,使用电脑版) 搜索航班信息 搜索记录 使用Fiddler查找url(没有得到有效url) 继续查找,发现航班信息列…

数据结构:二叉树(初阶)

朋友们、伙计们,我们又见面了,本期来给大家解读一下二叉树方面的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 …

振南技术干货集:制冷设备大型IoT监测项目研发纪实(3)

注解目录 1.制冷设备的监测迫在眉睫 1.1 冷食的利润贡献 1.2 冷设监测系统的困难 (制冷设备对于便利店为何如何重要?了解一下你所不知道的便利店和新零售行业。关 于电力线载波通信的论战。) 2、电路设计 2.1 防护电路 2.1.1 强电防护…

vue 中为什么需要虚拟DOM、VDOM 是如何生成的、VDOM 如何做 diff 的?

一、vue 中为什么需要虚拟DOM 1.1本概念 基本上所有框架都引入了虚拟 DOM 来对真实 DOM 进行抽象,也就是现在大家所熟知的VNode 和VDOM Virtual DOM 就是用js 对象来描述真实 DOM,是对真实 DOM 的抽象,由于直接操作 DOM 性能低但是is 层的操…

Jmeter执行某个请求时,先删除cookie信息

1、增加BeanShell PreProcessor 2、添加如下内容 import org.apache.jmeter.protocol.http.control.CookieManager;// Get the current threads cookie manager CookieManager cm sampler.getCookieManager();// Clear all cookies for this domain cm.clear();

力扣labuladong——一刷day45

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣270. 最接近的二叉搜索树值二、力扣404. 左叶子之和三、力扣617. 合并二叉树四、力扣623. 在二叉树中增加一行 前言 二叉树的递归分为「遍历」和「分解…

LeetCode:2304. 网格中的最小路径代价(C++)

目录 2304. 网格中的最小路径代价 题目描述: 实现代码: dp(dp有很多相似的经典题目,比较简单,不再给出解析) 2304. 网格中的最小路径代价 题目描述: 给你一个下标从 0 开始的整数矩阵 grid …