【定昌Linux系统】部署了java程序,设置开启启动

将代码上传到相应的目录,并且配置了一个.sh的启动脚本文件

文件内容:

#!/bin/bash# 指定JAR文件的路径(如果JAR文件在当前目录,可以直接使用文件名)
JAR_FILE="/usr/local/java/xs_luruan_client/lib/xs_luruan_client.jar"
# 或者使用绝对路径
# JAR_FILE="/path/to/your/myapp.jar"# 检查JAR文件是否存在
if [ ! -f "$JAR_FILE" ]; thenecho "Error: JAR file '$JAR_FILE' not found!"exit 1
fi# 运行JAR文件
java -cp "$JAR_FILE" com.xs.start.Starter# 检查Java命令是否成功执行(可选)
# 注意:这个检查可能不够准确,因为Java应用可能会以非零状态码退出表示正常结束(例如,Spring Boot应用的优雅停机)
# 如果你需要更精确的检查,应该根据应用的具体行为来调整
if [ $? -ne 0 ]; thenecho "Error: Java application exited with a non-zero status code."exit 1
fiecho "Java application exited successfully."

运行start.sh

./start.sh

运行界面:

我现在要做成开机启动的方式:

创建.service文件

[Unit]
Description=XS Luruan Client Service
After=network.target[Service]
Type=simple
ExecStart=/usr/local/java/xs_luruan_client/start.sh
Restart=on-failure
User=root[Install]
WantedBy=multi-user.target

将文件命名为:xs_luruan_client.service

将文件通过filezille工具上传到:/etc/systemd/system文件夹下,但是提示权限不够

怎么办呢,那应该就得付权限了

想直接在这个目录下创建.service文件,或者将.service文件复制到该目录下,提示

sudo: /etc/sudoers.d/README is world writable

经过查询deepseek,让修改权限

可以上传了

然后将设置自启动

在系统上执行如下:

验证下是否启动:

竟然启动失败了,这是怎么回事呢

查看服务状态

提示如下:

[Unit]
Description=XS Luruan Client Service
After=network.target[Service]
Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_391"
Environment="PATH=$JAVA_HOME/bin:$PATH"
Type=simple
ExecStart=/usr/local/java/xs_luruan_client/start.sh
Restart=on-failure
User=root[Install]
WantedBy=multi-user.target

增加了环境变了

重新刷新验证

还是同样的问题

查找javahome的绝对路径

readlink -f $(which java)

在.sh中命令增加绝对路径

#!/bin/bash# 指定JAR文件的路径(如果JAR文件在当前目录,可以直接使用文件名)
JAR_FILE="/usr/local/java/xs_luruan_client/lib/xs_luruan_client.jar"
# 或者使用绝对路径
# JAR_FILE="/path/to/your/myapp.jar"# 检查JAR文件是否存在
if [ ! -f "$JAR_FILE" ]; thenecho "Error: JAR file '$JAR_FILE' not found!"exit 1
fi# 运行JAR文件
/usr/local/java/jdk1.8.0_391/bin/java -cp "$JAR_FILE" com.xs.start.Starter# 检查Java命令是否成功执行(可选)
# 注意:这个检查可能不够准确,因为Java应用可能会以非零状态码退出表示正常结束(例如,Spring Boot应用的优雅停机)
# 如果你需要更精确的检查,应该根据应用的具体行为来调整
if [ $? -ne 0 ]; thenecho "Error: Java application exited with a non-zero status code."exit 1
fiecho "Java application exited successfully."

就可以正常启动了

现在要系统重启,发现的确执行了,但是联网失败了,看来是在终端联网就启动系统了,但是网络还没有通,所以联网失败了。

关闭服务:

# 停止单个服务(需管理员权限)
sudo systemctl stop <service-name># 示例:停止 Apache/Nginx
sudo systemctl stop apache2  # Ubuntu/Debian 的 Apache
sudo systemctl stop httpd     # CentOS/RHEL 的 Apache
sudo systemctl stop nginx     # Nginx# 查看服务状态(确认是否停止)
sudo systemctl status <service-name>

那么看看如何实现延时启动呢。

在.service文件中增加延时配置

[Unit]
Description=XS Luruan Client Service
After=network.target[Service]
Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_391"
Environment="PATH=$JAVA_HOME/bin:$PATH"
Type=simple
ExecStartPre=/bin/sleep 50  # 延时5秒
ExecStart=/usr/local/java/xs_luruan_client/start.sh
Restart=on-failure
User=root[Install]
WantedBy=multi-user.target

然后重新将文件上传,并且复制到system目录,刷新systemctl

提示sleep不存在,

那么就监测sleep是否存在

which sleep   # 输出应为 /bin/sleep 或 /usr/bin/sleep

输出:

/usr/bin/sleep 

那么就把start.sh  和 service文件都改一下

#!/bin/bash# 指定JAR文件的路径(如果JAR文件在当前目录,可以直接使用文件名)
JAR_FILE="/usr/local/java/xs_luruan_client/lib/xs_luruan_client.jar"
# 或者使用绝对路径
# JAR_FILE="/path/to/your/myapp.jar"# 检查JAR文件是否存在
if [ ! -f "$JAR_FILE" ]; thenecho "Error: JAR file '$JAR_FILE' not found!"exit 1
fi
#延时50秒再执行,以便于设备联网成功
/usr/bin/sleep 50# 运行JAR文件
/usr/local/java/jdk1.8.0_391/bin/java -cp "$JAR_FILE" com.xs.start.Starter# 检查Java命令是否成功执行(可选)
# 注意:这个检查可能不够准确,因为Java应用可能会以非零状态码退出表示正常结束(例如,Spring Boot应用的优雅停机)
# 如果你需要更精确的检查,应该根据应用的具体行为来调整
if [ $? -ne 0 ]; thenecho "Error: Java application exited with a non-zero status code."exit 1
fiecho "Java application exited successfully."
[Unit]
Description=XS Luruan Client Service
# 声明需要网络在线后才能启动
After=network-online.target
Wants=network-online.target[Service]
Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_391"
Environment="PATH=$JAVA_HOME/bin:$PATH"
Type=simple
ExecStart=/usr/local/java/xs_luruan_client/start.sh
Restart=on-failure
User=root[Install]
WantedBy=multi-user.target

通过在.sh中增加延时操作,终于可以在自启过程中,等待网络连接成功后再启动了,

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

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

相关文章

Java 8 中,可以使用 Stream API 和 Comparator 对 List 按照元素对象的时间字段进行倒序排序

文章目录 引言I 示例对象II List 按时间字段倒序排序: 使用 `Stream` 和 `Comparator` 排序方法 1:使用 `Comparator.comparing`方法 2:使用 `Comparator.reversed`方法 3:自定义 `Comparator`输出结果III 注意事项**时间字段类型**:**空值处理**:IV 总结引言 案例:在线用…

jvm内存模型,类加载机制,GC算法,垃圾回收器,jvm线上调优等常见的面试题及答案

JVM内存模型 JVM内存模型包括哪些区域 答案&#xff1a;JVM内存模型主要包括以下区域&#xff1a; 程序计数器&#xff1a;是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器&#xff0c;用于记录正在执行的虚拟机字节码指令的地址。Java虚拟机…

git clone的时候出现出现error

报错如下&#xff1a; Collecting githttps://github.com/haotian-liu/LLaVA.git Cloning https://github.com/haotian-liu/LLaVA.git to /tmp/pip-req-build-360q6tt1 Running command git clone --filterblob:none --quiet https://github.com/haotian-liu/LLaVA.git /t…

Minio搭建并在SpringBoot中使用完成用户头像的上传

Minio使用搭建并上传用户头像到服务器操作,学习笔记 Minio介绍 minio官网 MinIO是一个开源的分布式对象存储服务器&#xff0c;支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发&#xff0c;拥有轻量级、高性能、易部署等特点&#xff0c;并且可以自由…

vue3中ref和reactive响应式数据、ref模板引用(组合式和选项式区别)、组件ref的使用

目录 Ⅰ.ref 1.基本用法&#xff1a;ref响应式数据 2.ref模板引用 3.ref在v-for中的模板引用 ​4.ref在组件上使用 ​5.TS中ref数据标注类型 Ⅱ.reactive 1.基本用法&#xff1a;reactive响应式数据 2.TS中reactive标注类型 Ⅲ.ref和reactive的使用场景和区别 Ⅳ.小结…

javascript实现雪花飘落效果

本文实现雪花飘落效果的 JavaScript 网页设计案例&#xff0c;代码实现如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, init…

项目准备(flask+pyhon+MachineLearning)- 3

目录 1.商品信息 2. 商品销售预测 2.1 机器学习 2.2 预测功能 3. 模型评估 1.商品信息 app.route(/products) def products():"""商品分析页面"""data load_data()# 计算当前期间和上期间current_period data[data[成交时间] > data[成…

FPGA开发,使用Deepseek V3还是R1(3):系统级与RTL级

以下都是Deepseek生成的答案 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;1&#xff09;&#xff1a;应用场景 FPGA开发&#xff0c;使用Deepseek V3还是R1&#xff08;2&#xff09;&#xff1a;V3和R1的区别 FPGA开发&#xff0c;使用Deepseek V3还是R1&#x…

实现 Leaflet 多类型点位标记与聚合功能的实战经验分享

在现代的地理信息系统&#xff08;GIS&#xff09;应用中&#xff0c;地图功能是不可或缺的一部分。无论是展示商业网点、旅游景点还是公共服务设施&#xff0c;地图都能以直观的方式呈现数据。然而&#xff0c;当数据量较大时&#xff0c;地图上可能会出现大量的标记点&#x…

企微审批中MySQL字段TEXT类型被截断的排查与修复实践

在MySQL中&#xff0c;TEXT类型字段常用于存储较大的文本数据&#xff0c;但在一些应用场景中&#xff0c;当文本内容较大时&#xff0c;TEXT类型字段可能无法满足需求&#xff0c;导致数据截断或插入失败。为了避免这种问题&#xff0c;了解不同文本类型&#xff08;如TEXT、M…

【常见BUG】Spring Boot 和 Springfox(Swagger)版本兼容问题

???欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老…

HTTP 协议的发展历程:从 HTTP/1.0 到 HTTP/2.0

HTTP 协议的发展历程&#xff1a;从 HTTP/1.0 到 HTTP/2.0 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是 Web 的基础协议&#xff0c;用于客户端和服务器之间的通信。从 HTTP/1.0 到 HTTP/2.0&#xff0c;HTTP 协议经历了多次重大改…

apload-lab打靶场

1.提示显示所以关闭js 上传<?php phpinfo(); ?>的png形式 抓包&#xff0c;将png改为php 然后放包上传成功 2.提示说检查数据类型 抓包 将数据类型改成 image/jpeg 上传成功 3.提示 可以用phtml&#xff0c;php5&#xff0c;php3 4.先上传.htaccess文件&#xff0…

金融支付行业技术侧重点

1. 合规问题 第三方支付系统的平稳运营&#xff0c;严格遵循《非银行支付机构监督管理条例》的各项条款是基础与前提&#xff0c;其中第十八条的规定堪称重中之重&#xff0c;是支付机构必须牢牢把握的关键准则。 第十八条明确指出&#xff0c;非银行支付机构需构建起必要且独…

Cherry Studio + 火山引擎 构建个人AI智能知识库

&#x1f349;在信息化时代&#xff0c;个人知识库的构建对于提高工作效率、知识管理和信息提取尤为重要。尤其是当这些知识库能结合人工智能来智能化地整理、分类和管理数据时&#xff0c;效果更为显著。我最近尝试通过 Cherry Studio 和 火山引擎 来搭建个人智能知识库&#…

LeetCode 2 - 两数相加

LeetCode 2 - 两数相加 是一道经典链表操作问题&#xff0c;经常作为面试中基础题的变体被考察。掌握多种解法及其变体&#xff0c;并熟悉其核心思路和模板代码&#xff0c;可以快速备战相关链表或大数计算问题。 题目描述 给定两个非空链表&#xff0c;它们代表两个非负整数&…

Qt之QStateMachine等待

在项目中经常需要等待&#xff0c;我们模拟0-30的数&#xff0c;假如我们其中5&#xff0c; 25的数需要进行等待&#xff0c;等待用户处理完自己事情后&#xff0c;按下按钮继续&#xff0c;找Qt的项目中有一个 QStateMachineqstatemmachine类提供了一个分层有限状态机。 QSta…

elpis全栈课程学习之elpis-core学习总结

elpis全栈课程学习之elpis-core学习总结 核心原理 elpis-core是全栈框架elpis的服务端内核&#xff0c;主要应用于服务端接口的开发以及页面的SSR渲染&#xff0c;elpis-core基于约定优于配置的原理&#xff0c;通过一系列的loader来加载对应的文件&#xff0c;大大节约用户的…

ChatGPT与DeepSeek:开源与闭源的AI模型之争

目录 一、模型架构与技术原理 二、性能能力与应用场景 三、用户体验与部署灵活性 四、成本与商业模式 五、未来展望与市场影响 六、总结 随着人工智能技术的飞速发展&#xff0c;ChatGPT和DeepSeek作为两大领先的AI语言模型&#xff0c;成为了行业内外关注的焦点。它们在…

在笔记本电脑上用DeepSeek搭建个人知识库

最近DeepSeek爆火&#xff0c;试用DeepSeek的企业和个人越来越多。最常见的应用场景就是知识库和知识问答。所以本人也试用了一下&#xff0c;在笔记本电脑上部署DeepSeek并使用开源工具搭建一套知识库&#xff0c;实现完全在本地环境下使用本地文档搭建个人知识库。操作过程共…