Linux配置Java多服务开机启动脚本(包含前置远程MySQL和NACOS)

因为公司内部原因导致服务器经常关机开机,每次重启就需要手动启动大量服务,所以决定将所有服务都配置到开机启动里面
正常的Java项目一般都会依赖MySQL和NACOS等服务,所以在配置开机启动的时候我们首先要考虑的是服务需不需要等待nacos等服务启动后再启动,否则Java服务也无法正常启动
这里不教怎么配置MySQL和NACOS开机启动服务,直接教大家配置Java服务的脚本

首先我的Java服务jar包都放在服务器/usr/local/webapp/下了
我们先在这个目录下新建一个文件夹用来存放脚本

mkdir sh_folder

然后我们在sh_folder里面给order服务创建一个脚本

touch start_order.sh

脚本内容如下
pkill -f 是用来关闭之前的进程的,如果只是为了开机启动这个可以不要,但是我这里为了平时重启服务要用就留着了
大家也可以换成自己的启动命令

pkill -f 'java -jar -Dspring.profiles.active=test /usr/local/webapp/order-service-1.0-SNAPSHOT.jar'
sleep 5
cd /usr/local/webapp/
nohup java -jar -Dspring.profiles.active=test /usr/local/webapp/order-service-1.0-SNAPSHOT.jar > ./log/order-service.log 2>&1 &

我们再给pay服务创建一个脚本

touch start_pay.sh

脚本内容如下,可以看到命令都一样,就是换了一下jar包和日志文件

pkill -f 'java -jar -Dspring.profiles.active=test /usr/local/webapp/pay-service-1.0-SNAPSHOT.jar'
sleep 5
cd /usr/local/webapp/
nohup java -jar -Dspring.profiles.active=test /usr/local/webapp/pay-service-1.0-SNAPSHOT.jar > ./log/pay-service.log 2>&1 &

这里就只写这两个服务,要是有其它服务大家按照上面的流程加就可以了
下面为了一次启动多个服务我们还需要加个脚本

touch start_all.sh

脚本内容如下
主要要注意的就是里面的MySQL和NACOS服务ip和端口,大家换成自己的
还有一个很重要的问题就是如果一台服务器上服务很多建议启动一个等一段时间,因为多个服务同时启动会瞬间耗尽服务器内存导致服务启动失败等问题,所以我在里面加了sleep5,这个根据平时启动项目时间大家适当调整就可以了
多个服务的大家继续往里面加即可

#!/bin/bash# 远程 MySQL 服务器的相关信息
REMOTE_MYSQL_HOST="192.168.2.102"
REMOTE_MYSQL_PORT="3306"# 等待远程 MySQL 服务就绪的函数
wait_for_mysql() {until nc -zv -w 2 $REMOTE_MYSQL_HOST $REMOTE_MYSQL_PORT; doecho "Waiting for MySQL to start..."sleep 5doneecho "MySQL is ready!"
}# 调用等待函数
wait_for_mysql# 远程 NACOS 服务器的相关信息
REMOTE_NACOS_HOST="192.168.2.104"
REMOTE_NACOS_PORT="9000"# 等待远程 NACOS 服务就绪的函数
wait_for_nacos() {until nc -zv -w 2 $REMOTE_NACOS_HOST $REMOTE_NACOS_PORT; doecho "Waiting for NACOS to start..."sleep 5doneecho "NACOS is ready!"
}# 调用等待函数
wait_for_nacos# 启动第一个脚本
/usr/local/webapp/sh_folder/start_order.sh# 在第一个脚本启动后等待一段时间(例如,等待5秒)
sleep 5# 启动第二个脚本
/usr/local/webapp/sh_folder/start_pay.sh

这三个脚本创建好后还有一件事不要忘了,就是给它们加权限,不然后面自启的时候会提示文件找不到或者权限不足什么的

chmod 754 /usr/local/webapp/sh_folder/start_order.shchmod 754 /usr/local/webapp/sh_folder/start_pay.shchmod 754 /usr/local/webapp/sh_folder/start_all.sh

上面这些脚本只是用来启动项目的,大家平时重启服务什么的也可以用
接下来才是配置开机启动
我们进到下面这个目录

cd /lib/systemd/system

创建一个开机启动服务,注意文件名一定要是.service结尾,不然后面会报错

touch java_all.service

把下面内容放进去,复制的时候看下是不是完整的,[Unit]这个复制的时候经常有问题
注意TimeoutSec=500是给这个脚本设置超时时间,单位是秒,有时候脚本执行时间很长还没执行完就会中断的
然后ExecStartPre=/bin/sleep 120是等待120秒,因为有时候服务器启动顺序不一致,有些服务还没启动,这里主要针对集群服务
这两个大家看着加,大部分是不需要的

[Unit]Description=java_all_service
After=network.target[Service]
TimeoutSec=500
Type=forking
ExecStartPre=/bin/sleep 120
ExecStart=/usr/local/webapp/sh_folder/start_all.sh
PrivateTmp=true[Install]
WantedBy=multi-user.target

保存后一样的要给这个文件加权限等,直接执行下面命令

chmod 754 /lib/systemd/system/java_all.servicesystemctl daemon-reloadsystemctl enable java_all.service# 最后看下状态是否正常
systemctl status java_all.service

差点忘了,脚本里面用到nc命令,大家可以先试下有没有,没有的话用下面命令装一下

# 测试是否可以连接到MySQL服务
nc -zv -w 2 192.168.2.102 3306# 如果提示命令不存在就安装一下
yum install nc -y

这样就完成了

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

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

相关文章

【读书笔记】微习惯

周日晚上尝试速读一本书《微习惯》,共七章看了下目录结构并不复杂,计划每章7-8分钟读完, 从20:15-21:00。读的时候,订下闹钟,催促着自己的进度。边读边记了一些要点和微信读书里面的划线。 第六章实践内容最为丰富&…

“此应用专为旧版android打造,因此可能无法运行”,问题解决方案

当用户在Android P系统上打开某些应用程序时,可能会弹出一个对话框,提示内容为:“此应用专为旧版Android打造,可能无法正常运行。请尝试检查更新或与开发者联系”。 随着Android平台的发展,每个新版本通常都会引入新的…

wvp gb28181 pro 平台国标级连功能说明

国标28181不同平台之间支持两种连接方式,平级和上下级,WVP目前支持向上级级联。 测试环境 测试平台上级:192.168.10.209(Alam centos8) 测试平台下级:192.168.10.206(ky10_x86) 下级…

C++11--类的新功能

目录 类的新功能 默认成员函数 类成员变量初始化 强制生成默认的关键子default 禁止生成默认成员函数关键字delete 继承和多态中final和override关键字 类的新功能 默认成员函数 八个默认成员函数 在C11之前,一个类中有如下六个默认成员函数: 构造函数析构函数拷贝构造…

2023-12-03 C语言最小二乘法备忘

点击 <C 语言编程核心突破> 快速C语言入门 C语言最小二乘法备忘 前言一、数学公式二、代码总结 前言 要解决问题: 最小二乘法实现线性回归的C语言实现, 这个数学公式转为C语言. 一、数学公式 设有 n n n 组数据 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x n , y n ) …

KDE环境文件夹user-dirs为英文

KDE环境文件夹user-dirs 修改KDE主页文件夹为英文 该文件路径 ~/.config/user-dirs.dirs打开后会发现里面的内容如下 # This file is written by xdg-user-dirs-update # If you want to change or add directories, just edit the line youre # interested in. All local …

openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表

文章目录 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表140.1 相关概念140.2 操作步骤140.3 维护建议 openGauss学习笔记-140 openGauss 数据库运维-例行维护-例行维护表 为了保证数据库的有效运行&#xff0c;数据库必须在插入/删除操作后&#xff0c;基于…

Ant Design Pro 框架设置API Token拦截器的功能

分享记录一个解决方法&#xff0c;希望对大家有帮助。 找到文件&#xff0c;然后定义一个方法。最后调用一下即可。 代码我也给你贴上了。 // 获取token 拦截方法 const setTokenRequest (config: any) > {const token 30|eh5GNXWRe5rO4XLjbbnqy132RABfiKqI338EoIhqc790a…

思维模型 反馈效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。反馈促进改进。 1 反馈效应的应用 1.1 反馈效应在营销中的应用 1 “可口可乐与百事可乐之战” 在 20 世纪 80 年代&#xff0c;可口可乐公司是全球最大的饮料公司之一&#xff0c;其市场…

利用reddit的api进行爬虫

1 介绍 Reddit是一个社交新闻聚合网站&#xff0c;用户可以发布、评价和讨论各种话题。Reddit的内容涵盖了广泛的主题&#xff0c;可以从中获取大量的文本数据进行情绪分析。 2 注册 2.1 注册reddit 你需要先注册一个reddit的账号。 2.2 注册api https://www.reddit.com/…

文科专业和编程基础薄弱的女孩子做软件的神器——aardio学习资源入门

相关资源 aardio 开发桌面应用&#xff0c;这几点必须要掌握&#xff01; - 星安果的文章 - 知乎 https://zhuanlan.zhihu.com/p/430970376 从使用者角度来为aardio编程软件说句话 - popdes的文章 - 知乎 https://zhuanlan.zhihu.com/p/461290014 故事和情怀 优点 1 快捷 2 …

HarmonyOS开发(九):数据管理

1、概述 1.1、功能简介 数据管理为开发者提供数据存储、数据管理能力。 它分为两个部分&#xff1a; 数据存储&#xff1a;提供通用数据持久化能力&#xff0c;根据数据特点&#xff0c;分为用户首选项、键值型数据库和关系型数据库。数据管理&#xff1a;提供高效的数据管…

Bean的加载控制

Bean的加载控制 文章目录 Bean的加载控制编程式注解式ConditionalOn*** 编程式 public class MyImportSelector implements ImportSelector {Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {try {Class<?> clazz Class.forName("…

UCore-OS实验Lab0

实验内容&#xff1a;搭建ucore-os的实验环境 实验准备内容&#xff1a;vmware虚拟机&#xff0c;ubuntu22.04镜像&#xff0c;qemu7.0.0源码 ucore代码地址 GitHub - chyyuu/os_kernel_lab at x86-32 实验步骤&#xff1a; 在vmware中安装ubuntu&#xff0c;因为我个人喜欢…

★448. 找到所有数组中消失的数字

★448. 找到所有数组中消失的数字 使用数组本身当作哈希表 考虑让nums数组本身当作哈希表。 遍历nums&#xff0c;每遇到一个数x&#xff0c;就让在x-1位置处的数n。 再次遍历nums&#xff0c;如果遇到i位置上数nums[i]不大于n&#xff0c;则i1并没有出现。 eg&#xff1a; …

【智能家居】四、网络服务器线程控制功能点

网络控制 网络线程控制功能点代码 inputCommand.h&#xff08;输入控制指令&#xff09;socketControl.c&#xff08;socket网络控制指令&#xff09;main.c&#xff08;主函数&#xff09;编译运行结果 网络控制 Linux网络编程 “网络控制”&#xff08;Network Control&a…

openEuler学习04-ssl升级到openssl-1.1.1w

当前环境ssl的版本是 1.1.1f &#xff0c;计划升级到openssl-1.1.1w [roottest ~]# more /etc/os-release NAME"openEuler" VERSION"20.03 (LTS-SP3)" ID"openEuler" VERSION_ID"20.03" PRETTY_NAME"openEuler 20.03 (LTS-SP3)&q…

ES6 Promise的用法,async/await异步处理同步化

文章目录 一、什么是promise &#xff1f;二、await / async ES7的新规范&#xff0c;异步处理同步化 一、什么是promise &#xff1f; promise是解决异步的方法&#xff0c;本质上是一个构造函数&#xff0c;可以用它实例化一个对象。对象身上有resolve、reject、all&#xff…

java学习part33Date

1.Jdk8之前 1.1当前系统时间 1.2.Date类 1.2.1util.date 两个构造器两个方法 1.2.2sql.date 1.3SimpleDateFormat日期格式 1.4Calendar日历 147-常用类与基础API-JDK8之前日期时间API的使用&#xff1a;Date、SimpleDateFormat、Calendar_哔哩哔哩_bilibili 2.Jdk8 2.1本地时…

【C语言学习疑难杂症】第6期:C语言中如何打印一些特殊字符,比如打印扩展ascii码字符

首先我们来看下ascii表和ascii拓展表: ascii表中的字符只有128个,是从0-127,而拓展ascii表的内容是128-255。拓展表中它们都是一些特殊的字符,如果我们想答应ascii拓展码中的一些字符应该要怎么操作呢? 比如下面的代码: unsigned char a = 176, b = 219;printf("%…