CentOS7.6上实现Spring Boot(JAR包)开机自启
前言
Linux自启(或开机自启)指的是在Linux系统启动时自动运行特定的程序或脚本。当计算机启动时,操作系统会按照一定的顺序加载系统服务和配置,其中包括自动启动一些应用程序或服务。这些应用程序或服务会在系统启动后自动运行,以提供特定的功能或服务。
开机自启的好处在于可以在系统启动时自动恢复之前的工作状态,减少手动干预,同时确保特定的服务或应用程序始终处于运行状态,提供持续的服务。
sh脚本是指Shell脚本,是一种在Unix/Linux系统上运行的脚本文件,通常使用Shell编程语言来编写。Shell是操作系统的一种命令行解释器,它可以用来执行操作系统命令、管理文件系统、处理文本数据等。
Shell脚本是一个纯文本文件,以.sh扩展名结尾。它包含一系列Shell命令和控制结构,用于自动化完成一系列任务。通过编写Shell脚本,可以将一系列复杂的操作和任务集中到一个文件中,并通过运行脚本来实现这些操作,从而简化了操作过程并提高了效率。
一、创建工作目录
Spring Boot是一款方便开发者快速搭建基于Spring的应用程序的工具。而Spring Boot可以方便的加载外部配置文件,只需要将配置文件放在指定的位置即可。具体实现如下:
mkdir -p /home/java-server/test-demo
2、创建启动脚本
进入jar目录:
cd /home/java-server/test-demo
创建脚本文件:
vim start.sh
启动脚本内容:
#!/bin/sh
export LANG="en_US.UTF-8"
cd /home/java-server/test-demo
runMessage=`ps aux | grep \`cat pidfile.txt\``
projectStartCommand="/usr/local/java/jdk1.8.0_131/bin/java -jar xxx.jar"
if [[ $runMessage == *$projectStartCommand* ]]
thenecho "Application has starting ,restarting..."kill -9 `cat pidfile.txt`nohup /usr/local/java/jdk1.8.0_131/bin/java -jar xxx.jar -java.tmp.dir=/home/java-server/test-demo/temp >/dev/null 2>&1 & echo $! > pidfile.txt
elseecho "Application has stopped ,starting..."nohup /usr/local/java/jdk1.8.0_131/bin/java -jar xxx.jar -java.tmp.dir=/home/java-server/test-demo/temp >/dev/null 2>&1 & echo $! > pidfile.txt
fi
- 脚本中/home/java-server/test-demo就是jar包所在的,可以根据实际情况定。
- xxx.jar为实际的jar包名称。
- /usr/local/java/jdk1.8.0_131/bin/java为jdk环境所在路径。
3、创建停止脚本
进入jar目录
cd /home/java-server/test-demo
创建脚本文件:
vim stop.sh
启动脚本内容:
#!/bin/sh
cd /home/java-server/test-demo
PID=$(cat pidfile.txt)
if [ ${PID} ];
thenecho 'Application is stpping...'echo kill $PID DONEkill $PID
elseecho 'Application is already stopped...'
fi
4、设置开机自启
进入system:
# 进入system
cd /usr/lib/systemd/system/
创建自启脚本:
vim xxx.service
xxx.service为脚本的名称,一般来就是jar包前缀名称一致,比如:test-demo.service
内容如下:
[Unit]
Description=xxx
After=network.target[Service]
Type=forking
ExecStart=/home/java-server/test-demo/start.sh
ExecStop=/home/java-server/test-demo/stop.sh
PrivateTmp=true[Install]
WantedBy=multi-user.target
- Description:描述,一般为项目名称
- ExecStart:开启脚本位置
- ExecStop:停止脚本位置
设置脚本权限:
systemctl daemon-reload
systemctl enable xxx.service
启动|停止命令:
# 启动
systemctl start xxx# 停止
systemctl stop xxx
xxx就是xxx.service的前缀。
相关文章:
CentOS7.6上实现Spring Boot(JAR包)开机自启
前言 Linux自启(或开机自启)指的是在Linux系统启动时自动运行特定的程序或脚本。当计算机启动时,操作系统会按照一定的顺序加载系统服务和配置,其中包括自动启动一些应用程序或服务。这些应用程序或服务会在系统启动后自动运行&a…...

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、框架知识分布二、Spring1. spring-单例bean① 问题引入② 单例bean是线程安全的吗③ 问题总结④ 实战面试 2. spring-AOP① 问题引入② AOP记录操作日志③ …...
QT人脸识别知识
机器学习的作用:根据提供的图片模型通过算法生成数据模型,从而在其它图片中查找相关的目 标。 级联分类器:是用来人脸识别。 在判断之前,我们要先进行学习,生成人脸的模型以便后续识别使用。 人脸识别器:…...

熟悉Redis6
NoSQL数据库简介 技术发展 技术的分类 1、解决功能性的问题:Java、Jsp、RDBMS、Tomcat、HTML、Linux、JDBC、SVN 2、解决扩展性的问题:Struts、Spring、SpringMVC、Hibernate、Mybatis 3、解决性能的问题:NoSQL、Java线程、Hadoop、Nginx…...
ip地址会随网络变化而变化吗
随着科技的飞速发展,互联网已深入我们生活的方方面面。在这庞大的网络世界中,IP地址作为网络通信的基础元素,引起了广泛关注。网络变化与IP地址之间存在着密切的关系。那么,IP地址是否会随着网络变化而变化呢?虎观代理…...
QT连接服务器通信,客户端以及服务器端
服务器端 .h文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器头文件 #include <QTcpSocket> //客户端头文件 #include <QList> //链表头文件,用来存放客户端容器 #include <QDebug> #i…...

Vuex仓库的创建
vuex 的使用 - 创建仓库 文章目录 vuex 的使用 - 创建仓库1.安装 vuex2.新建 store/index.js 专门存放 vuex3.创建仓库 store/index.js4 在 main.js 中导入挂载到 Vue 实例上5.测试打印Vuex 1.安装 vuex 安装vuex与vue-router类似,vuex是一个独立存在的插件&#x…...

C++中的红黑树
红黑树 搜索二叉树搜索二叉树的模拟实现平衡搜索二叉树(AVL Tree)平衡搜索二叉树的模拟实现红黑树(Red Black Tree)红黑树的模拟实现 红黑树的应用(Map 和 Set)Map和Set的封装 搜索二叉树 搜索二叉树的概念:二叉搜索树又称二叉排序树,它或者是一棵空树&…...

SQL语法知识回顾
一、SQL语言的分类 由于数据库管理系统(数据库软件)功能非常多,不仅仅是存储数据,还要包含:数据的管理、表的管理、库的管理、账户管理、权限管理等等。所以,操作数据库的SQL语言,也基于功能&am…...
Java基础二十七(泛型)
泛型 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 Java的泛型是伪…...
Python入门教程36:urllib网页请求模块的用法
urllib是Python中的一个模块,它提供了一些函数和类,用于发送HTTP请求、处理URL编码、解析URL等操作。无需安装即可使用,包含了4个模块: #我的Python教程 #官方微信公众号:wdPythonrequest:它是最基本的htt…...
LeetCode 每日一题 2023/9/4-2023/9/10
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 9/4 449. 序列化和反序列化二叉搜索树9/5 2605. 从两个数字数组里生成最小数字9/6 1123. 最深叶节点的最近公共祖先9/7 2594. 修车的最少时间9/8 2651. 计算列车到站时间9/…...

C# Onnx Yolov8 Seg 分割
效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System…...

Postman接口测试流程
一、工具安装 ● 安装Postman有中文版和英文版,可以选择自己喜欢的版本即可。安装时重新选择一下安装路径(也可以默认路径),一直下一步安装完成即可。(本文档采用英文版本)安装文件网盘路径链接࿱…...

探索GreatADM:如何快速定义监控
引文 在数据库运维过程中,所使用的运维管理平台是否存在这样的问题: 1、默认监控粒度不够,业务需要更细颗粒度的监控数据。2、平台默认的监控命令不适合,需要调整阈值量身定制监控策略。3、不同类型的实例或组件需要有不同的监控重点,但管理平台监控固…...

C# 参数名加冒号,可以打乱参数顺序
今天看到Python有这种语法,参数名后面跟着等号写参数,联想到前几天用到的Serilog,好像有个参数名加冒号的写法,搜索了一下,果真有这种用法。 函数特别大的时候,用这种方法很直观,而且参数可以打…...

AVL树 模拟实现(插入)
目录 模拟插入节点 左单旋 右单旋 右左双旋 左右双旋 总结 实现 插入实现 左单旋实现 右单旋实现 右左双旋实现 左右双旋实现 AVL树 模拟实现(插入) AVL 树,是高度平衡二叉搜索树,其主要通过旋转来控制其左右子树的高…...
Java面试整理(三)《JavaSE》
反射机制(低) 在我刚开始学Java的时候,大家都很难理解反射这个概念,在实际开发中,虽然都有反射的踪影,但感觉自己又能理解是的。反射机制是指在程序运行时,对任意一个类都能获取其所有属性和方法,并且对任意一个对象都能调用其任意一个方法。 反射的步骤如下: 获取想要…...

LeetCode 1282. Group the People Given the Group Size They Belong To【哈希表】1267
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

Vue2项目练手——通用后台管理项目第八节
Vue2项目练手——通用后台管理项目 菜单权限功能tab.jsLogin.vueCommonAside.vuerouter/index.js 权限管理问题解决router/tab.jsCommonHeader.vuemain.js 菜单权限功能 不同的账号登录,会有不同的菜单权限通过url输入地址来显示页面对于菜单的数据在不同页面之间的…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...