java系统部署到Linux

1、安装java 1.8JDK

卸载Open JDK

首先,我们先检查系统是否自带了 JDK。输入命令

java -verison

在这里插入图片描述
批量删除

rpm -qa | grep java | xargs rpm -e --nodeps

下载并安装JDK

我们在 user 目录下建立一个新的 java文件夹,用来存放 JDK文件。
在这里插入图片描述
jdk下载地址
在这里插入图片描述
上传到服务器后,执行解压命令

// tar包进行解压
tar -zxvf jdk-8u401-linux-x64.tar.gz

环境变量配置

如果/etc/profile文件不可编辑,我们需要先修改其为可编辑才行

sudo chmod -v u+w /etc/profile

vim编辑器来进行编辑。输入命令

vim /etc/profile

添加如下配置

# java
export JAVA_HOME=/usr/java/jdk1.8.0_401
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

配置添加完成后,按 “Esc”键,输入 “:wq”,就可以保存文件并返回了

重新编译

source /etc/profile

测试是否安装成功

java
javac
java -version

jdk安装参考里面附带了Oracle账号

2、system 服务管理 Java 应用程序

创建服务单元文件

在 /etc/systemd/system 目录下创建一个以 .service 为后缀的文件,例如spring-boot.service。

vim /etc/systemd/system/spring-boot.service
chmod 777 /etc/systemd/system/spring-boot.service

/usr/lib/systemd/system/spring-boot.service

编辑服务单元文件

[Unit]
Description=spring-boot-demo
After=syslog.target[Service]
User=root
ExecStart=/usr/java/jdk1.8.0_401/bin/java -jar /data/java/spring-boot/spring-boot-admin.jar
WorkingDirectory=/data/java/spring-boot
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog[Install]
WantedBy=multi-user.target

对应解释

[Unit] 部分:Description=spring-boot:描述了这个服务的简短描述,即服务的名称。
After=syslog.target:指定了在启动这个服务之前,需要等待 syslog.target 目标完成启动。
[Service] 部分:User=root:指定了这个服务运行的用户,这里是 root 用户。
ExecStart=java -jar /data/java/spring-boot/spring-admin.jar:指定了服务启动时要执行的命令,这里是启动一个Java应用程序,运行在 /data/java/spring-boot/spring-admin.jar 文件上。
WorkingDirectory=/data/java/spring-boot:指定了服务的工作目录,这是执行命令时的当前目录。
Restart=always:指定了服务的重启策略,即当服务意外退出时,总是自动重启。
RestartSec=10:指定了服务在意外退出后重新启动的延迟时间,这里是10秒。
StandardOutput=syslog:指定了服务的标准输出重定向到 syslog。这意味着服务的输出将会被记录到系统日志中。
StandardError=syslog:指定了服务的标准错误输出重定向到 syslog。
[Install] 部分:此部分为空,因此没有指定服务的安装信息。

ExecStart也可以加一下启动参数等

错误了看日志

状态日志
systemctl status spring-boot.service
正常日志
journalctl 
错误日志
journalctl -xe

重新加载systemd管理器配置

在编辑完成服务单元文件后,运行以下命令来重新加载systemd管理器配置:

sudo systemctl daemon-reload

启动并启用服务:

运行以下命令来启动和启用你的新服务:

sudo systemctl start spring-boot-service
sudo systemctl enable spring-boot-service

验证服务状态:

运行以下命令来验证你的服务是否已经成功启动:

sudo systemctl status spring-boot-service

3、Supervisor 管理 Java 应用程序

supervisorctl 命令

#启动一个服务
supervisorctl start <service_name>
#停止一个服务
supervisorctl stop <service_name>
#重启一个服务
supervisorctl restart <service_name>
查看所有服务的状态:
supervisorctl status
查看某个服务的状态:
supervisorctl status <service_name>
查看所有服务的详细信息:
supervisorctl -c /path/to/supervisord.conf status
重新加载配置:
supervisorctl reread
supervisorctl update
关闭 Supervisor:
supervisorctl shutdown

Supervisor 配置示例

[program:spring-admin]
command=/usr/local/java/jdk1.8.0_391/bin/java -jar -Xms256m -Xmx256m -Dspring.profiles.active=dev -Dserver.port=8801 /data/springBoot/sd-api/spring-admin-0.0.1-SNAPSHOT.jar
directory=/data/springBoot/sd-api/
environment=NACOS_NAMESPACE="d90cb455-****-61458cb3cf1a",NACOS_HOST="172.****.251",NACOS_PASSWORD="***"
autostart=true
startsecs=10
autorestart=true
startretries=3
user=root
priority=999
redirect_stderr=true
stdout_logfile_maxbytes=20MB
stdout_logfile_backups = 20
stopasgroup=false
killasgroup=false
stdout_logfile_maxbytes=1024MB
stdout_logfile=/data/springBoot/sd-api/logs/springBoot-admin.log

解释

[program:spring-admin]:定义了一个名为 spring-admin 的程序。command:指定了启动命令,即 Java 应用程序的启动命令。在这里,它启动了一个 Java 可执行文件(JAR 文件),并设置了一些 JVM 参数和应用程序的参数,如内存大小、激活的 Spring profile、服务器端口等。directory:指定了程序的工作目录,即程序运行时的当前工作目录。environment:设置了环境变量。这里设置了三个环境变量:NACOS_NAMESPACE、NACOS_HOST 和 NACOS_PASSWORD。autostart:指定了是否在 Supervisor 启动时自动启动该程序。startsecs:指定了程序启动后的等待时间(秒),用于判断程序是否成功启动。autorestart:指定了是否在程序意外退出后自动重启。startretries:指定了自动重启的次数。user:指定了程序运行的用户。priority:指定了程序的优先级。redirect_stderr:指定了是否将标准错误重定向到标准输出。stdout_logfile_maxbytes:指定了标准输出日志文件的最大大小。stdout_logfile_backups:指定了标准输出日志文件的备份数量。stopasgroup 和 killasgroup:指定了是否将程序的进程和子进程组一起停止或杀死。stdout_logfile:指定了标准输出日志文件的路径。

4、Supervisor 和自定义 Systemd 服务的对比

Supervisor:

优点:
  1. 简单易用:Supervisor 的配置相对简单,上手较容易。
  2. 跨平台支持:可以在不同的操作系统上使用。
  3. 功能丰富:提供了丰富的进程管理功能,如进程监控、自动重启等。
缺点:
  1. 对于一些高级功能,可能需要额外的配置。
  2. 不如 Systemd 那样紧密集成到操作系统中。

自定义 Systemd 服务(例如 spring-boot.service):

优点:
  1. 紧密集成到操作系统中:Systemd 是现代 Linux 系统中默认的服务管理工具,自定义服务可以更紧密地集成到系统中。
  2. 更丰富的功能:Systemd 提供了更丰富的功能和选项,如依赖管理、进程隔离、资源限制等。
  3. 灵活性和定制性:你可以完全控制你的自定义服务的行为,以满足特定的需求。
缺点:
  1. 配置复杂:相比 Supervisor,自定义 Systemd 服务的配置可能更加复杂一些。
  2. 学习曲线较陡:Systemd 提供了大量的功能和选项,需要花一些时间来学习和掌握。

总的来说,如果你的需求比较简单,只需要一个轻量级的进程管理工具来启动和监控 Java 应用程序,那么 Supervisor 是一个不错的选择。而如果你需要更丰富的功能和更紧密地集成到操作系统中,那么自定义 Systemd 服务可能更适合你的需求

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

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

相关文章

快速上手 Elasticsearch:Docker Compose 部署详解

最近面试竞争日益激烈&#xff0c;Elasticsearch作为一款广泛应用的中间件&#xff0c;几乎成为面试中必考的知识点。最近&#xff0c;AIGC也备受关注&#xff0c;而好多的AI项目中也采用了Elasticsearch作为向量数据库&#xff0c;因此我们迫切希望学习Elasticsearch。对于学习…

Docker简介及用途,为什么要使用Docker?Docker容器和虚拟机的区别?

Docker简介 前言 前端有必要学习Docker吗&#xff1f;有&#xff01;&#xff01;不仅要学Docker&#xff0c;还要学习Kubernetes (K8s)&#xff0c;Jenkins 那问题来了&#xff0c;Docker,k8s,jenkins到底要先学习那个呢&#xff1f;当然是Docker 总结来说&#xff0c;先学习…

C++初阶:STL容器list的使用与初版自实现

目录 1. list的接口与使用1.1 默认成员函数1.2 迭代器与容量相关成员函数1.3 存储数据操作相关成员函数1.4 其他list操作成员函数 2. list的自实现2.1 list的自实现功能2.2 list的结点结构2.3 list的迭代器2.3 list的结构2.4 list迭代器的运算符重载2.5 list的成员函数 3. cons…

双指针(滑动窗口)-算法刷题

一.移动零&#xff08;. - 力扣&#xff08;LeetCode&#xff09;&#xff09; 算法思想 &#xff1a; 设置两个指针left,right&#xff0c;将数组分为三块[0,left]为不为0的元素&#xff0c;[left1,right-1]为0元素&#xff0c;[right,num.size()-1]为未扫描的区域&#xff0c…

第四百二十二回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义标题栏"相关的内容&#xff0c;本章回中将介绍自定义Action菜单.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里提到的…

day3-QT

1>使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函。将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是…

JS操作元素的内容

对象.innerText 属性 对象.innerHTML 属性 <body><div classbox>文字</div><script>//首先获取元素const box document.querySelector(.box)console.log(box.innerText)</script> </body> 1.元素innerText属性 将文本内容添加到标签任…

【Redis知识点总结】(六)——主从同步、哨兵模式、集群

Redis知识点总结&#xff08;六&#xff09;——主从同步、哨兵模式、集群 主从同步哨兵集群 主从同步 redis的主从同步&#xff0c;一般是一个主节点&#xff0c;加上多个从节点。只有主节点可以接收写命令&#xff0c;主节点接收到的写命令&#xff0c;会同步给从节点&#…

Java-SSM小区物业管理系统

Java-SSM小区物业管理系统 1.服务承诺&#xff1a; 包安装运行&#xff0c;如有需要欢迎联系&#xff08;VX:yuanchengruanjian&#xff09;。 2.项目所用框架: 前端:JSP、layui等。 后端:SSM,即Spring、SpringMvc、Mybatis等。 3.项目功能点: 1.业主功能: a.登录/退出登录 …

【投资学】作业

第20题 20.某一看涨期权和某一看跌期权的标的股票均为XYZ&#xff0c;两者的执行价格均为每股50美元&#xff0c;期限均为6个月。若投资者以4美元的价格购入看涨期权&#xff0c;当股票价格分别是40美元&#xff0c;45美元&#xff0c;50美元&#xff0c;55美元&#xff0c;60…

git 模拟队内协作

push 与 pull 命令需要登录。 凭据管理器都得是对应用户的。一台电脑上需要切换&#xff0c;删除再连接。 目录 一、前提条件二、流程三、命令如下四、注意事项&#xff08;先看这个&#xff09; 一、前提条件 项目主人仓库公开仓库里有一个文件&#xff0c;例如&#xff1a;h…

零代码编程:用kimichat批量重命名txt文本文件

一个文件夹中有很多个txt文本文件&#xff0c;需要全部进行重命名。 可以在kimichat中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个关于批量重命名txt文本文件的Python脚本&#xff0c;下面是具体步骤&#xff1a; D:\Best Seller Books 这个文件夹…

Java二阶知识点总结(七)SVN和Git

SVN 1、SVN和Git的区别 SVN是集中式的&#xff0c;也就是会有一个服务器保存所有代码&#xff0c;拉取代码的时候只能从这个服务器上拉取&#xff1b;Git是分布式的&#xff0c;也就是说每个人都保存有所有代码&#xff0c;如果要获取代码&#xff0c;可以从其他人手上获取SV…

mysql80-DBA数据库学习1

掌握能力 核心技能 核心技能 mysql部署 官网地址www.mysql.com 或者www.oracle.com https://dev.mysql.com/downloads/repo/yum/ Install the RPM you downloaded for your system, for example: yum install mysql80-community-release-{platform}-{version-number}.noarch…

STM32之HAL开发——系统定时器(SysTick)

系统定时器&#xff08;SysTick&#xff09;介绍 SysTick—系统定时器是属于 CM3 内核中的一个外设&#xff0c;内嵌在 NVIC 中。系统定时器是一个 24bit的向下递减的计数器&#xff0c;计数器每计数一次的时间为 1/SYSCLK&#xff0c;一般我们设置系统时钟 SYSCLK等于 72M。当…

C语言动态内存的管理

前言 本篇博客就来探讨一下动态内存&#xff0c;说到内存&#xff0c;我们以前开辟空间大小都是固定的&#xff0c;不能调整这个空间大小&#xff0c;于是就有动态内存&#xff0c;可以让我们自己选择开辟多少空间&#xff0c;更加方便&#xff0c;让我们一起来看看动态内存的有…

【大模型】在VS Code(Visual Studio Code)上安装中文汉化版插件

文章目录 一、下载安装二、配置显示语言&#xff08;一&#xff09;调出即将输入命令的搜索模式&#xff08;二&#xff09;在大于号后面输入&#xff1a;Configure Display Language&#xff08;三&#xff09;重启 三、总结 【运行系统】win 11 【本文解决的问题】 1、英文不…

音视频领域首个,阿里云推出华为鸿蒙 HarmonyOS NEXT 版音视频 SDK

近日&#xff0c;阿里云在官网音视频终端 SDK 栏目发布适配 HarmonyOS NEXT 的操作文档和 SDK&#xff0c;官宣 MediaBox 音视频终端 SDK 全面适配 HarmonyOS NEXT。 此外&#xff0c;阿里云播放器 SDK 也在华为开发者联盟官网鸿蒙生态伙伴 SDK 专区同步上线&#xff0c;面向所…

C-GMVAE

embedding w i l _i^l il​&#xff0c;a feature embedding w x f _x^f xf​ 辅助信息 一作Junwen Bai&#xff0c;他的文章不建议复现

产品经理方法论——MRD文档模板】

一、 文档格式 无要求 二、文档类型 PPT 三、文档框架 1. 市场说明 市场规模&#xff1a;市场规模决定最终的利润。我们对于直接产生现金流的产品通过交易额衡量市场规模&#xff0c;如果是间接产生现金流的产品我们通过用户量衡量市场规模。市场增速&#xff1a;随着时间…