基于Linux的 java -jar
优点:简单直观:直接在Linux系统上运行java -jar命令,操作简单,易于理解和实施资源利用率高:没有额外容器开销,直接运行在宿主机上,资源利用率较高灵活性高:可以根据需要进行各种定制化操作,如设置环境变量、调整JVM参数等
缺点:环境一致性差:不同开发环境之间可能存在差异,可能导致不同机器环境不同而运行不了。部署复杂:需要手动配置和依赖管理,容易出错。资源隔离差:多个应用运行在同一台物理机上,资源隔离不足,可能导致资源争用和性能问题可维护性差:手动部署和管理,缺乏自动化,维护成本高==终端关闭后进程终止==:默认情况下,如果终端关闭,进程会被终止。但可以以守护进程的方式运行
基于Docker的 docker run
优点:环境一致性:通过Dockerfile定义应用环境,确保开发、测试和生产环境的一致性可移植性强:容器化的应用可以在任何安装了Docker的环境中运行,提高了可移植性资源隔离:每个应用运行在独立的容器中,资源隔离,互不影响自动化部署:可以结合CICD实现自动化部署快速启动和扩展:容器启动快,可以水平扩展守护进程支持:Docker自身支持守护进程,容器在后台运行,不受终端关闭的影响
缺点:资源开销:容器运行需要额外的资源开销,尤其在多容器环境下复杂性:需要编写和维护Dockerfile个Docker Compose文件,有一定的学习曲线网络配置:容器之间的网络通信需要额外配置,增加了复杂性存储管理:需要管理容器的持久化存储,确保数据不丢失
基于Kubernetes的部署
优点:高可用性和自动伸缩性:Kubernetes提供自动扩容、缩容、负载均衡和故障恢复能力,确保了应用的高可用性和弹性环境一致性:通过配置文件定义应用的运行环境,确保一致性资源管理:Kubernetes提供强大的资源管理和调度能力,优化资源利用服务发现和负载均衡:内置的服务发现和负载均衡机制,简化微服务架构的管理自动化运维:支持自动化部署,滚动更新和回滚,提高运维效率守护进程支持:Kubernetes通过Pod和Deployment管理应用,确保应用始终运行在后台,不受终端关闭的影响
缺点:复杂性:Kubernetes学习和使用难度较高,需要一定的技术背景初始设置复杂:搭建和配置Kubernetes集群需要较多的时间和资源
如何在Linux 使用bash文件以守护进程运行java -jar?
我们已经知道,当我们使用java -jar来部署服务时,默认情况,如果我们的终端关闭,我们的进程会被终止。
那么怎么保证我们的进程在关闭终端时还能进行运行呢?那就使用如下命令
nohup java -jar -Dserver.port=9095 wms.jar > wms.log 2>&1 &
Shell
nohup:退出系统后继续运行指定的命令
wms.jar:jar包
-Dserver.port=9095:指定端口为9095
> wms.log:将标准输出重定向到 wms.log。
2>&1:将标准错误输出重定向到标准输出,从而也写入 wms.log。
末尾&:将命令放到后台运行。
ps -ef|grep java
Plain Text
用于查看java进程