nohup java -jar 启动java项目

news2025/5/30 15:27:56

hi,我是程序员王也,一个资深Java开发工程师,平时十分热衷于技术副业变现和各种搞钱项目的程序员~,如果你也是,可以一起交流交流。

今天我们聊聊linux中运行java jar包的问题~

在这里插入图片描述

理解nohup命令

nohup命令的基本概念

nohup是一个常用的Unix命令,用于在忽略挂起信号(SIGHUP)的情况下运行指定的命令或进程。当用户注销或关闭终端时,通常后台运行的进程会收到SIGHUP信号而终止。使用nohup可以避免这种情况,使得进程即使在用户注销后也能继续运行。

nohup的工作原理

nohup通过忽略SIGHUP信号来实现命令的持续运行。当nohup命令被执行时,它会启动一个新的进程,并将该进程的SIGHUP信号屏蔽,这样即使终端关闭,该进程也不会受到影响。

nohup与后台进程的区别

后台进程可以通过在命令后添加&符号来启动,如command &。然而,后台进程在用户注销后通常无法继续运行,因为它们会收到SIGHUP信号。与之相比,nohup启动的进程则不会受到用户注销的影响。

示例:使用nohup启动Java应用

假设我们有一个名为MyApp.jar的Java应用程序,我们希望在后台运行它,即使用户注销或关闭终端,应用也能持续运行。

启动命令
nohup java -jar MyApp.jar &

这个命令做了以下几件事:

  • nohup:告诉系统忽略挂起信号。
  • java -jar MyApp.jar:实际的Java命令,用于启动JAR文件。
  • &:将命令放入后台执行。
输出重定向

默认情况下,nohup会将输出重定向到名为nohup.out的文件中。如果需要自定义输出文件,可以使用重定向操作符:

nohup java -jar MyApp.jar > output.log 2>&1 &

这里:

  • >:将标准输出重定向到output.log文件。
  • 2>&1:将标准错误也重定向到同一个文件。

查看进程状态

可以使用ps命令查看nohup启动的进程状态:

ps -ef | grep MyApp.jar

停止进程

要停止由nohup启动的进程,可以使用kill命令结合进程ID(PID):

kill -9 PID

其中,PIDps命令查询到的进程ID。

案例源码说明

以下是使用nohup启动Java应用的完整示例,包括启动、输出重定向和进程管理:

启动Java应用

nohup java -jar /path/to/MyApp.jar > /path/to/output.log 2>&1 &

查看进程

ps -ef | grep MyApp.jar

停止进程

kill -9 $(pgrep -f MyApp.jar)

在这个例子中,pgrep -f MyApp.jar用于查找所有与MyApp.jar相关的进程,然后kill -9发送SIGKILL信号以强制终止进程。


Java项目打包与部署

Java项目的打包流程

Java项目打包通常指的是将编译后的.class文件及其依赖项打包成一个可执行的JAR(Java Archive)文件。这个过程可以通过多种工具完成,其中最常用的是Maven和Gradle。

使用Maven打包
<!-- 在pom.xml文件中配置build插件 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.2.0</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.example.MyApp</mainClass> <!-- 主类全名 -->
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

然后运行Maven命令来打包项目:

mvn clean package
使用Gradle打包

build.gradle文件中配置Jar任务:

jar {
    manifest {
        attributes 'Main-Class': 'com.example.MyApp' // 主类全名
    }
}

然后运行Gradle命令来打包项目:

gradle build

创建可执行的JAR文件

创建一个可执行的JAR文件意味着JAR包含了一个清单文件(MANIFEST.MF),其中指定了程序的入口类。

Maven案例源码

pom.xml中配置好maven-jar-plugin后,执行mvn package命令,Maven会在target目录下生成一个包含所有依赖和配置好清单的JAR文件。

Gradle案例源码

build.gradle中配置好Jar任务后,执行gradle build命令,Gradle会在build/libs目录下生成JAR文件。

部署策略与环境准备

部署Java应用程序需要考虑运行环境的配置,包括JDK版本、系统权限、依赖库等。

环境准备
  • 确保服务器上安装了正确版本的JDK。
  • 配置环境变量,如JAVA_HOME指向JDK安装目录。
  • 确保服务器有适当的权限设置,以便应用程序可以运行。
部署策略
  • 直接部署:将生成的JAR文件上传至服务器的指定目录。
  • 持续集成/持续部署(CI/CD):通过自动化工具如Jenkins,自动化测试和部署流程。

案例源码说明

假设我们已经使用Maven或Gradle成功打包了一个Java应用程序,现在需要将其部署到服务器上。

Maven部署案例
  1. 运行mvn package生成JAR文件。
  2. 使用SCP(安全复制)命令将JAR文件复制到服务器:
    scp target/MyApp.jar username@server:/path/to/deployment
    
Gradle部署案例
  1. 运行gradle build生成JAR文件。
  2. 使用SCP命令将JAR文件复制到服务器:
    scp build/libs/MyApp.jar username@server:/path/to/deployment
    

一旦JAR文件上传到服务器,就可以使用之前提到的nohup命令来启动Java应用程序。


使用nohup启动Java项目的步骤

准备启动脚本

在部署Java项目后,创建一个启动脚本可以简化启动过程,并允许更灵活地管理Java应用。以下是一个简单的启动脚本示例:

#!/bin/bash

# Java应用的JAR文件路径
JAR_PATH="/path/to/MyApp.jar"

# 定义日志文件输出路径
LOG_FILE="/path/to/MyApp.log"

# 使用nohup命令启动Java应用,并将输出重定向到日志文件
nohup java -jar $JAR_PATH > $LOG_FILE 2>&1 &

# 回显启动信息
echo "Java application started. Check the log at $LOG_FILE"

确保将/path/to/MyApp.jar/path/to/MyApp.log替换为实际的JAR文件路径和日志文件路径。

配置环境变量

在启动脚本中或在系统环境变量中配置必要的环境变量,如JAVA_HOME和应用依赖的库路径。

在脚本中设置环境变量
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk"
export PATH="$JAVA_HOME/bin:$PATH"
在系统环境变量中设置
  • 对于Linux系统,可以在用户的.bashrc.profile文件中添加上述export语句。
  • 对于Windows系统,可以通过系统属性 -> 高级 -> 环境变量来设置。

启动命令的完整示例

结合上述脚本和环境变量配置,一个完整的启动命令可能如下:

# 运行启动脚本
./start-app.sh

确保start-app.sh脚本文件具有执行权限,可以使用chmod命令来设置:

chmod +x start-app.sh

监控和管理运行中的Java应用

监控和管理Java应用对于确保其稳定性和性能至关重要。

查看进程

使用ps命令查看Java应用的进程信息:

ps -ef | grep java
查看日志

检查之前定义的日志文件以了解应用的运行状况:

tail -f /path/to/MyApp.log
停止应用

如果需要停止应用,可以使用kill命令结合进程ID(PID):

kill -9 $(pgrep -f MyApp.jar)

案例源码说明

假设我们有一个名为MyApp.jar的Java应用程序,我们希望在服务器上自动启动它,并确保它在后台稳定运行。

启动脚本start-app.sh

#!/bin/bash

# 设置环境变量
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk"
export PATH="$JAVA_HOME/bin:$PATH"

# 指定JAR文件和日志文件路径
JAR_PATH="/usr/local/apps/MyApp.jar"
LOG_PATH="/var/log/MyApp.log"

# 启动Java应用,并将输出重定向到日志文件
nohup java -jar $JAR_PATH > $LOG_PATH 2>&1 &

echo "Application started. Check logs at $LOG_PATH"
给脚本赋予权限
chmod +x start-app.sh
启动应用
./start-app.sh
监控应用
# 查看进程
ps -ef | grep java

# 查看日志
tail -f /var/log/MyApp.log
停止应用
kill -9 $(pgrep -f MyApp.jar)

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

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

相关文章

对于一些未来规划的想法

文章目录 一、关于如何加技能点二、关于大厂、中厂、小厂三、大语言模型、元宇宙、VR、虚拟货币四、关于嵌入式的技术路线五、其他 一、关于如何加技能点 首先进入课题组&#xff0c;务必先把眼前的东西学好&#xff0c;做好当下的事情。 也是关于个人的发展规划的话&#xff…

强强联手促发展,奋楫共进启新篇 | 中创算力与中国移动签订战略合作协议

在数字化浪潮席卷全球的今天&#xff0c;河南中创算力信息科技有限公司与中国移动通信集团河南有限公司郑州分公司携手并进&#xff0c;共同开启了数字化转型的新篇章。 2024年7月10日上午&#xff0c;双方在中国移动郑州分公司隆重举行了战略合作协议的签约仪式。双方将在5G技…

炎热夏季环境下的文物保护:挑战与策略

随着夏季的到来&#xff0c;高温和强烈的日照给文物保护带来了新的挑战。在这个季节&#xff0c;文物不仅面临着物理和化学损害的风险&#xff0c;还可能因为管理不善而遭受人为破坏。因此&#xff0c;探讨如何在夏季炎热天气中做好文物保护工作具有重要意义。 夏季炎热天气对文…

海外电商SAAS平台对接流程

海外电商SAAS平台对接流程通常包括以下几个步骤&#xff0c;需要说明的是对接这些平台存在一定的风险&#xff0c;为了降低这些风险&#xff0c;建议您选择信誉良好的平台&#xff0c;并做好安全防护措施。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xf…

FastAPI 学习之路(三十九)对开发接口进行测试

概况 对于开发好的接口需要进行测试之后才能发布。当我们在开发的时候&#xff0c;没有提前测试&#xff0c;我们也要对我们自己的接口进行测试&#xff0c;那么FastApi自身也带有针对开发的接口进行测试的功能。我们看下FastApi官方给我们提供了什么样的支持。 接口还是基于…

景点门票销售管理系统(数据库课设)

1.课设要求描述 ●实现票价管理&#xff0c;应分老年、小孩、成人、团体等&#xff1b; ●实现营业员管理&#xff1b; 实现门票销售、退票管理&#xff1b; ● 创建存储过程&#xff0c;统计指定日期的门票销售情况&#xff1b; ●创建存储过程&#xff0c;统计指定月份…

PHP智慧社区小区物业管理系统小程序源码

让生活更便捷&#xff0c;社区更和谐✨ &#x1f3e1;【开篇&#xff1a;智慧生活&#xff0c;从社区开始】&#x1f3e1; 在快节奏的现代生活中&#xff0c;寻找一份便捷与舒适成为了我们共同的追求。小区&#xff0c;作为我们日常生活的温馨港湾&#xff0c;其管理水平和服…

小红书的大模型有点「怂」

大模型发展至今&#xff0c;各个公司都根据自己的业务发布了各自的大模型。而小红书作为种草类产品的代表&#xff0c;自研的大模型一直引而不发&#xff0c;还在内测阶段。 AI以及自研大模型的持续火热&#xff0c;让以原创内容为主导的小红书坐不住了。 近期&#xff0c;据多…

Day66 代码随想录打卡|回溯算法篇---分割回文串

题目&#xff08;leecode T131&#xff09;&#xff1a; 给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串。返回 s 所有可能的分割方案。 方法&#xff1a;本题是一个分割回文串的问题&#xff0c;是回溯算法的另一类问题。 针对一个字…

oak相机使用oak官网方式标定

目录 一、depthai ROS驱动 一、depthai ROS驱动 &#xff08;1&#xff09;驱动下载地址&#xff1a;2. C 开发快速上手 — DepthAI Docs 0.3.0.0 documentation sudo apt install ./depthai_2.17.1_arm64.deb //运行 Python3 utilities/cam_test.py -mres 400 -cams rgb,m …

【2】kettle使用的小细节——输出数据分发和复制

在进行地铁数据清洗时&#xff0c;遇到3组线路&#xff1a; 出现的问题&#xff1a;程序运行到 增加序列 组件还有396条数据记录&#xff0c;但是在排序记录中只有 132条数据&#xff0c;即对3条线路进行了分发&#xff0c;各发送了132条数据。 断开这三条连接&#xff0c;重新…

对智能的研究正在悄悄地诱发复杂取代科学

随着智能人工智能的发展&#xff0c;传统科学研究方法可能面临新的挑战或者被扩展。人工智能的发展带来了大数据分析、机器学习、深度学习等新的工具和方法&#xff0c;这些方法在处理复杂系统和大规模数据方面表现出色&#xff0c;使得科学研究变得更加多样化和复杂化。对智能…

市面上护眼台灯哪个牌子最好?五款必须入手的护眼台灯分享

护眼台灯最终都绕不开护眼这个话题。护眼灯作为保护视力的辅助工具&#xff0c;以有效护眼的价值深受大众青睐。学生长时间用眼&#xff0c;普通台灯的伤害大&#xff0c;而护眼台灯的出现&#xff0c;通过其先进的技术和设计&#xff0c;能为学生提供了一个既舒适又健康的照明…

WPF/C#:在WPF中如何实现依赖注入

前言 本文通过 WPF Gallery 这个项目学习依赖注入的相关概念与如何在WPF中进行依赖注入。 什么是依赖注入 依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;是一种设计模式&#xff0c;用于实现控制反转&#xff08;Inversion of Control&#xff0…

Python高层神经网络 API库之Keras使用详解

概要 随着深度学习在各个领域的广泛应用,许多开发者开始使用各种框架来构建和训练神经网络模型。Keras 是一个高层神经网络 API,使用 Python 编写,并能够运行在 TensorFlow、CNTK 和 Theano 之上。Keras 旨在简化深度学习模型的构建过程,使得开发者能够更加专注于实验和研…

公司内部配置GitLab,通过SSH密钥来实现免密clone、push等操作

公司内部配置GitLab&#xff0c;通过SSH密钥来实现免密clone、push等操作。以下是配置SSH密钥以实现免密更新的步骤&#xff1a; 1.生成SSH密钥 在本地计算机上打开终端或命令提示符。输入以下命令以生成一个新的SSH密钥&#xff1a;ssh-keygen -t rsa -b 4096 -C "your…

一文清晰了解表格表单

一、表格 要想实现下述内容&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"GBK"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第59-agent自动获取喵星人资讯并保存至云文件夹

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第59-agent自动获取喵星人资讯并保存至云文件夹 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由Java…

springboot仪器校准系统-计算机毕业设计源码51504

摘 要 随着科技的不断发展。测量设备的准确性和可靠性对于各行各业都至关重要。仪器校准系统作为确保测量设备性能的重要手段&#xff0c;已成为工业生产、科学研究、质量控制等领域不可或缺的一部分。本文对仪器校准系统进行了概述&#xff0c;探讨了校准方法、流程、特点、应…

等保2.0丨5分钟速览:小白都能理解的等保2.0简介

等保2.0的概念 等保2.0全称网络安全等级保护2.0制度&#xff0c;是我国网络安全领域的基本国策、基本制度。以1.0的规范为基础&#xff0c;等级保护标准以积极的防御为重点&#xff0c;由被动的防御发展为安全可信、动态感知和全过程的事前、事中和事后的全过程的全方位的审核…