瑞_Linux中部署配置Java服务并设置开机自启动
文章目录
- 背景
- Linux服务配置步骤并设置开机自启动
- 附-Linux服务常用指令

🙊 前言:由于博主在工作时,需要将服务部署到 Linux 服务器上运行,每次通过指令启动服务非常麻烦,所以将 jar 包部署的服务设置开机自启动,特此记录
背景
由于是记录在 Linux 环境下配置 jar 包程序并将其配置为 Linux 服务并设置开机自自动,所以需要 Linux 以及相关 Java 环境。博主使用的SSH客户端远程连接工具是 MobaXterm,有需要的小伙伴可以参考《瑞_Java所有相关环境及软件的安装和卸载》
步骤中所需的路径参考如下 ⬇️
1️⃣ JDK 安装路径/usr/local/jdk1.8,即 Java 程序执行路径/usr/local/jdk1.8/bin/java


2️⃣ 需要配置为服务的 jar 包工作路径/home/ray-project/ray-monitor,以及 jar 包所在路径/home/ray-project/ray-monitor/ray-monitor.jar

Linux服务配置步骤并设置开机自启动
1️⃣ 进入 Linux 系统服务路径
cd /usr/lib/systemd/system/
2️⃣ 新建服务文件,如ray_monitor.service
vi ray_monitor.service
3️⃣ 服务文件内容参考如下⬇️
[Unit]
# 服务描述
Description=ray_monitor
# 指定该服务在哪个目标(target)之后启动。network.target表示网络服务已经启动并可用后,再启动这个服务
After=network.target[Service]
# 指定服务类型为简单类型(simple),这意味着服务将一直运行,直到被停止
Type=simple
# 指定服务的工作目录
WorkingDirectory=/home/ray-project/ray-monitor/
# 设置服务的重启策略,这里设置为always,表示只要服务进程终止,就会自动重启。且Restart 先执行ExecStop, 再执行ExecStart
Restart=always
# 定义启动该服务时执行的命令,并设置远程调试监听端口
ExecStart=/usr/local/jdk1.8/bin/java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=48644 -jar ./ray-monitor.jar
# 定义停止该服务时执行的命令。这里使用kill -15发送SIGTERM信号给主进程($MAINPID)
ExecStop=/usr/bin/kill -15 $MAINPID
# 指定成功退出的状态码。由于Java进程在收到SIGTERM信号后会返回143,所以这里设置为143。正常kill执行成功是返回0
SuccessExitStatus=143[Install]
# 指定该服务属于哪个目标(target)。multi-user.target是默认的多用户目标,意味着该服务将在多用户模式下启动
WantedBy=multi-user.target
vi 指令的使用 1️⃣ 保存并退出:在 vi 的命令模式下(按下 Esc 键确保处于命令模式),输入
:wq并按 Enter 键。这个命令会将当前编辑的内容保存到文件中,然后退出 vi
2️⃣ 强制保存并退出:如果文件没有写入权限,但你想强制保存并退出,可以使用:wq!命令
3️⃣ 仅保存不退出:如果你只想保存当前编辑的内容而不退出 vi,可以输入:w并按 Enter 键
4️⃣ 仅退出不保存:如果你想放弃所有未保存的更改并退出 vi,可以输入:q!并按 Enter 键
命令模式与其他模式的关系 与输入模式的关系:在命令模式下,按下
i键可以切换到输入模式,此时用户可以开始输入文本。完成输入后,按下 Esc 键可以返回到命令模式
与末行模式的关系:在命令模式下,按下冒号:可以切换到底行模式,以执行文件管理操作,如保存文件和退出 vi。完成操作后,按下 Esc 键可以返回到命令模式
4️⃣ 重新加载 systemd 守护进程的配置文件,使配置文件生效
sudo systemctl daemon-reload
5️⃣ 设置服务开机自启动
sudo systemctl enable ray_monitor.service

6️⃣ 启动服务
sudo systemctl start ray_monitor.service
7️⃣ 检查服务状态
sudo systemctl status ray_monitor.service

瑞:如果服务启动异常,可以通过
journalctl -xe或sudo systemctl status xxx.service -l进行错误排查
# 查看启动日志错误详情
journalctl -xe
附-Linux服务常用指令
瑞:以下命令中
XXX.service可以改为XXX,即不需要.service也能执行
# 设置XXX服务开机自启动
sudo systemctl enable xxx.service
# 移除XXX服务开机自启动的设置
sudo systemctl disable xxx.service
# 重新加载 systemd 守护进程的配置文件,使配置文件生效
sudo systemctl daemon-reload# 查看XXX服务状态
sudo systemctl status xxx.service
# 重新加载指定服务的配置文件,而不需要中断服务
sudo systemctl reload xxx.service
# 停止XXX服务,如果设置了服务开机自启动,则服务器重启后仍然会自启动
sudo systemctl stop xxx.service
# 开启XXX服务,如果没有设置服务开机自启动,则服务器重启后仍然不会自启动
sudo systemctl start xxx.service
如果觉得这篇文章对您有所帮助的话,请动动小手点波关注💗,你的点赞👍收藏⭐️转发🔗评论📝都是对博主最好的支持~
相关文章:
瑞_Linux中部署配置Java服务并设置开机自启动
文章目录 背景Linux服务配置步骤并设置开机自启动附-Linux服务常用指令 🙊 前言:由于博主在工作时,需要将服务部署到 Linux 服务器上运行,每次通过指令启动服务非常麻烦,所以将 jar 包部署的服务设置开机自启动&#x…...
javaEE-多线程进阶-JUC的常见类
juc:指的是java.util.concurrent包,该包中加载了一些有关的多线程有关的类。 目录 一、Callable接口 FutureTask类 参考代码: 二、ReentrantLock 可重入锁 ReentrantLock和synchronized的区别: 1.ReentantLock还有一个方法:…...
Flume拦截器的实现
Flume conf文件编写 vim file_to_kafka.conf#定义组件 a1.sources r1 a1.channels c1#配置source a1.sources.r1.type TAILDIR a1.sources.r1.filegroups f1 a1.sources.r1.filegroups.f1 /Users/zhangjin/model/project/realtime-flink/applog/log/app.* # 设置断点续传…...
Swift Combine 学习(四):操作符 Operator
Swift Combine 学习(一):Combine 初印象Swift Combine 学习(二):发布者 PublisherSwift Combine 学习(三):Subscription和 SubscriberSwift Combine 学习(四&…...
leetcode 173.二叉搜索树迭代器栈绝妙思路
以上算法题中一个比较好的实现思路就是利用栈来进行实现,以下方法三就是利用栈来进行实现的,思路很好,很简练。进行next的时候,先是一直拿到左边的子树,直到null为止,这一步比较好思考一点,下一…...
df.groupby([pd.Grouper(freq=‘1M‘, key=‘Date‘), ‘Buyer‘]).sum()
df.groupby([pd.Grouper(freq1M, keyDate), Buyer]).sum() 用于根据特定的时间频率和买家(Buyer)对 DataFrame 进行分组,然后计算每个分组的总和。下面是对这行代码的逐步解释: df.groupby([...]):这个操作会根据传入的…...
LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 (4)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144881432 大模型的 HTTP 服务,通过网络接口,提供 AI 模型功能的服务,允许通过发送 HTTP 请求,交互…...
icp备案网站个人备案与企业备案的区别
个人备案和企业备案是在进行ICP备案时需要考虑的两种不同情况。个人备案是指个人拥有的网站进行备案,而企业备案则是指企业或组织名下的网站进行备案。这两者在备案过程中有一些明显的区别。 首先,个人备案相对来说流程较为简单。个人备案只需要提供个人…...
如何不修改模型参数来强化大语言模型 (LLM) 能力?
前言 如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。 大语言模型 (Large Language Model, LLM, e.g. ChatGPT) 的参数量少则几十亿,多则上千亿,对其的训…...
AF3 AtomAttentionEncoder类的init_pair_repr方法解读
AlphaFold3 的 AtomAttentionEncoder 类中,init_pair_repr 方法方法负责为原子之间的关系计算成对表示(pair representation),这是原子转变器(atom transformer)模型的关键组成部分,直接影响对蛋白质/分子相互作用的建模。 init_pair_repr源代码: def init_pair_repr(…...
DDoS攻击防御方案大全
1. 引言 随着互联网的迅猛发展,DDoS(分布式拒绝服务)攻击成为了网络安全领域中最常见且危害严重的攻击方式之一。DDoS攻击通过向目标网络或服务发送大量流量,导致服务器过载,最终使其无法响应合法用户的请求。本文将深…...
Vue中常用指令
一、内容渲染指令 1.v-text:操作纯文本,用于更新标签包含的文本,但是使用不灵活,无法拼接字符串,会覆盖文本,可以简写为{{}},{{}}支持逻辑运算。 用法示例: //把name对应的值渲染到…...
Servlet解析
概念 Servlet是运行在服务端的小程序(Server Applet),可以处理客户端的请求并返回响应,主要用于构建动态的Web应用,是SpringMVC的基础。 生命周期 加载和初始化 默认在客户端第一次请求加载到容器中,通过反射实例化…...
带虚继承的类对象模型
文章目录 1、代码2、 单个虚继承3、vbptr是什么4、虚继承的多继承 1、代码 #include<iostream> using namespace std;class Base { public:int ma; };class Derive1 :virtual public Base { public:int mb; };class Derive2 :public Base { public:int mc; };class Deri…...
深度学习中的离群值
文章目录 深度学习中有离群值吗?深度学习中的离群值来源:处理离群值的策略:1. 数据预处理阶段:2. 数据增强和鲁棒模型:3. 模型训练阶段:4. 异常检测集成模型: 如何处理对抗样本?总结…...
如何利用Logo设计免费生成器创建专业级Logo
在当今的商业世界中,一个好的Logo是品牌身份的象征,它承载着公司的形象与理念。设计一个专业级的Logo不再需要花费大量的金钱和时间,尤其是当我们拥有Logo设计免费生成器这样的工具时。接下来,让我们深入探讨如何利用这些工具来创…...
Mysql SQL 超实用的7个日期算术运算实例(10k)
文章目录 前言1. 加上或减去若干天、若干月或若干年基本语法使用场景注意事项运用实例分析说明2. 确定两个日期相差多少天基本语法使用场景注意事项运用实例分析说明3. 确定两个日期之间有多少个工作日基本语法使用场景注意事项运用实例分析说明4. 确定两个日期相隔多少个月或多…...
运算指令(PLC)
加 ADD 减 SUB 乘 MUL 除 DIV 浮点运算 整数运算...
「Mac畅玩鸿蒙与硬件49」UI互动应用篇26 - 数字填色游戏
本篇教程将带你实现一个数字填色小游戏,通过简单的交互逻辑,学习如何使用鸿蒙开发组件创建趣味性强的应用。 关键词 UI互动应用数字填色动态交互逻辑判断游戏开发 一、功能说明 数字填色小游戏包含以下功能: 数字选择:用户点击…...
机器学习经典算法——逻辑回归
目录 算法介绍 算法概念 算法的优缺点 LogisticRegression()函数理解 环境准备 算法练习 算法介绍 算法概念 逻辑回归(Logistic Regression)是一种广泛应用于分类问题的机器学习算法。 它基于线性回归的思想,但通过引入一个逻辑函数&…...
终极指南:如何深度探索Alerter的10个隐藏高级功能
终极指南:如何深度探索Alerter的10个隐藏高级功能 【免费下载链接】Alerter Tapadoo/Alerter: 是一个简单易用的 Android 通知和进度条控件库。适合对 Android 开发、用户界面以及想要在 Android 应用中显示通知和进度条的开发者。 项目地址: https://gitcode.com…...
如何通过智能求职助手提升职位时间筛选效率?揭秘高效求职新方法
如何通过智能求职助手提升职位时间筛选效率?揭秘高效求职新方法 【免费下载链接】boss-show-time 展示boss直聘岗位的发布时间 项目地址: https://gitcode.com/GitHub_Trending/bo/boss-show-time 在当今竞争激烈的就业市场中,职位时间筛选已成为…...
LeetCode 300. Longest Increasing Subsequence 题解
LeetCode 300. Longest Increasing Subsequence 题解 题目描述 给你一个整数数组 nums,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,…...
B站视频字幕抓取实战:Tampermonkey搭配GreasyFork脚本,5分钟搞定CC字幕导出
B站视频字幕高效提取指南:Tampermonkey与GreasyFork脚本深度应用 每次观看B站优质内容时,那些精心制作的字幕是否让你想保存下来反复学习?传统录屏或手动抄写效率低下,而专业工具又过于复杂。本文将带你探索浏览器脚本的魔法世界&…...
别再单独部署Mosquitto了!用Docker一步搞定带MQTT插件的RabbitMQ 3.13
告别繁琐部署:用Docker Compose快速搭建支持MQTT的RabbitMQ集群 在物联网和微服务混合架构中,消息中间件选型常常让开发者陷入两难——选择轻量级的Mosquitto MQTT broker虽然能满足设备通信需求,却无法处理服务间的AMQP消息;部署…...
8人SolidWorks研发共享一台服务器——性能算力共享智能按需分配
8人SolidWorks研发团队可借助云飞云智能共享云桌面,通过以下方式实现一台服务器的性能算力共享与智能按需分配。一、核心硬件配置CPU:选择多核高主频处理器,如Intel Core i9 14900K(24核32线程)或AMD锐龙9 9950X&#…...
利用快马平台与vscode codex快速构建react待办事项应用原型
最近在尝试用AI工具快速验证产品原型,发现InsCode(快马)平台配合VSCode Codex能实现惊人的开发效率。以React待办事项应用为例,从零到可交互原型只用了不到10分钟,分享下具体实现思路和操作过程。 需求拆解与AI描述 首先将待办事项应用的7个核…...
从HC-SR04老用户视角,实测2020新版:盲区更小、功耗更低,但这两点不注意容易翻车
HC-SR04新版深度评测:老用户必看的5个升级细节与3个隐藏陷阱 第一次拿到2020版HC-SR04时,我差点以为发错了货——外观几乎和老版本一模一样,连螺丝孔位都分毫不差。但当我用示波器捕捉到仅2.1mA的工作电流时,才确信这确实是用上了…...
nuScenes多传感器融合:毫米波雷达点云与图像时空对齐实战
1. 多传感器融合的核心挑战 自动驾驶系统就像一位全天候工作的司机,需要同时处理来自不同"感官"的信息。毫米波雷达擅长测距和测速,摄像头则能识别颜色和纹理,但要让它们像人类感官一样协同工作,首先要解决时空对齐的问…...
LFM2.5-1.2B-Thinking-GGUF算法解析应用:图解经典算法与复杂度分析
LFM2.5-1.2B-Thinking-GGUF算法解析应用:图解经典算法与复杂度分析 1. 算法可视化教学新范式 算法学习一直是计算机科学教育中的难点。传统的教科书讲解方式往往让初学者感到抽象难懂,而LFM2.5-1.2B-Thinking-GGUF模型为算法教学带来了全新的可视化解决…...
