欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

linux中nohup?java?-jar啟動java項目的步驟

 更新時間:2024年08月21日 09:48:16   作者:程序員王也  
nohup是一個Unix和Linux命令,用于運行關閉時不會被終止的進程,這篇文章主要給大家介紹了關于linux中nohup?java?-jar啟動java項目的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

理解nohup命令

nohup命令的基本概念

nohup是一個常用的Unix命令,用于在忽略掛起信號(SIGHUP)的情況下運行指定的命令或進程。當用戶注銷或關閉終端時,通常后臺運行的進程會收到SIGHUP信號而終止。使用nohup可以避免這種情況,使得進程即使在用戶注銷后也能繼續(xù)運行。

nohup的工作原理

nohup通過忽略SIGHUP信號來實現(xiàn)命令的持續(xù)運行。當nohup命令被執(zhí)行時,它會啟動一個新的進程,并將該進程的SIGHUP信號屏蔽,這樣即使終端關閉,該進程也不會受到影響。

nohup與后臺進程的區(qū)別

后臺進程可以通過在命令后添加&符號來啟動,如command &。然而,后臺進程在用戶注銷后通常無法繼續(xù)運行,因為它們會收到SIGHUP信號。與之相比,nohup啟動的進程則不會受到用戶注銷的影響。

示例:使用nohup啟動Java應用

假設我們有一個名為MyApp.jar的Java應用程序,我們希望在后臺運行它,即使用戶注銷或關閉終端,應用也能持續(xù)運行。

啟動命令

nohup java -jar MyApp.jar &

這個命令做了以下幾件事:

  • nohup:告訴系統(tǒng)忽略掛起信號。
  • java -jar MyApp.jar:實際的Java命令,用于啟動JAR文件。
  • &:將命令放入后臺執(zhí)行。

輸出重定向

默認情況下,nohup會將輸出重定向到名為nohup.out的文件中。如果需要自定義輸出文件,可以使用重定向操作符:

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

這里:

  • >:將標準輸出重定向到output.log文件。
  • 2>&1:將標準錯誤也重定向到同一個文件。

查看進程狀態(tài)

可以使用ps命令查看nohup啟動的進程狀態(tài):

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發(fā)送SIGKILL信號以強制終止進程。

Java項目打包與部署

Java項目的打包流程

Java項目打包通常指的是將編譯后的.class文件及其依賴項打包成一個可執(zhí)行的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

創(chuàng)建可執(zhí)行的JAR文件

創(chuàng)建一個可執(zhí)行的JAR文件意味著JAR包含了一個清單文件(MANIFEST.MF),其中指定了程序的入口類。

Maven案例源碼

pom.xml中配置好maven-jar-plugin后,執(zhí)行mvn package命令,Maven會在target目錄下生成一個包含所有依賴和配置好清單的JAR文件。

Gradle案例源碼

build.gradle中配置好Jar任務后,執(zhí)行gradle build命令,Gradle會在build/libs目錄下生成JAR文件。

部署策略與環(huán)境準備

部署Java應用程序需要考慮運行環(huán)境的配置,包括JDK版本、系統(tǒng)權限、依賴庫等。

環(huán)境準備

  • 確保服務器上安裝了正確版本的JDK。
  • 配置環(huán)境變量,如JAVA_HOME指向JDK安裝目錄。
  • 確保服務器有適當的權限設置,以便應用程序可以運行。

部署策略

  • 直接部署:將生成的JAR文件上傳至服務器的指定目錄。
  • 持續(xù)集成/持續(xù)部署(CI/CD):通過自動化工具如Jenkins,自動化測試和部署流程。

案例源碼說明

假設我們已經使用Maven或Gradle成功打包了一個Java應用程序,現(xiàn)在需要將其部署到服務器上。

Maven部署案例

  • 運行mvn package生成JAR文件。
  • 使用SCP(安全復制)命令將JAR文件復制到服務器:
    scp target/MyApp.jar username@server:/path/to/deployment
    

Gradle部署案例

  • 運行gradle build生成JAR文件。
  • 使用SCP命令將JAR文件復制到服務器:
    scp build/libs/MyApp.jar username@server:/path/to/deployment
    

一旦JAR文件上傳到服務器,就可以使用之前提到的nohup命令來啟動Java應用程序。

使用nohup啟動Java項目的步驟

準備啟動腳本

在部署Java項目后,創(chuàng)建一個啟動腳本可以簡化啟動過程,并允許更靈活地管理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文件路徑和日志文件路徑。

配置環(huán)境變量

在啟動腳本中或在系統(tǒng)環(huán)境變量中配置必要的環(huán)境變量,如JAVA_HOME和應用依賴的庫路徑。

在腳本中設置環(huán)境變量

export JAVA_HOME="/usr/lib/jvm/java-8-openjdk"
export PATH="$JAVA_HOME/bin:$PATH"

在系統(tǒng)環(huán)境變量中設置

  • 對于Linux系統(tǒng),可以在用戶的.bashrc.profile文件中添加上述export語句。
  • 對于Windows系統(tǒng),可以通過系統(tǒng)屬性 -> 高級 -> 環(huán)境變量來設置。

啟動命令的完整示例

結合上述腳本和環(huán)境變量配置,一個完整的啟動命令可能如下:

# 運行啟動腳本
./start-app.sh

確保start-app.sh腳本文件具有執(zhí)行權限,可以使用chmod命令來設置:

chmod +x start-app.sh

監(jiān)控和管理運行中的Java應用

監(jiān)控和管理Java應用對于確保其穩(wěn)定性和性能至關重要。

查看進程

使用ps命令查看Java應用的進程信息:

ps -ef | grep java

查看日志

檢查之前定義的日志文件以了解應用的運行狀況:

tail -f /path/to/MyApp.log

停止應用

如果需要停止應用,可以使用kill命令結合進程ID(PID):

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

案例源碼說明

假設我們有一個名為MyApp.jar的Java應用程序,我們希望在服務器上自動啟動它,并確保它在后臺穩(wěn)定運行。

啟動腳本start-app.sh

#!/bin/bash

# 設置環(huán)境變量
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

監(jiān)控應用

# 查看進程
ps -ef | grep java

# 查看日志
tail -f /var/log/MyApp.log

停止應用

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

總結  

到此這篇關于linux中nohup java -jar啟動java項目的文章就介紹到這了,更多相關nohup java -jar啟動java項目內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java等待喚醒機制線程通信原理解析

    Java等待喚醒機制線程通信原理解析

    這篇文章主要介紹了Java等待喚醒機制線程通信原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • 使用Java代碼實現(xiàn)Redis和數據庫數據同步

    使用Java代碼實現(xiàn)Redis和數據庫數據同步

    這篇文章主要介紹了使用Java代碼實現(xiàn)Redis和數據庫數據同步問題,文中通過代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-06-06
  • SpringBoot項目使用mybatis-plus代碼生成的實例詳解

    SpringBoot項目使用mybatis-plus代碼生成的實例詳解

    mybatis-plus是mybatis的增強,不對mybatis做任何改變,涵蓋了代碼生成,自定義ID生成器,快速實現(xiàn)CRUD,自動分頁,邏輯刪除等功能。本文就來講講SpringBoot項目如何使用mybatis-plus實現(xiàn)代碼生成,需要的可以了解一下
    2022-10-10
  • Sparsearray稀疏數組原理及實例詳解

    Sparsearray稀疏數組原理及實例詳解

    這篇文章主要介紹了Sparsearray稀疏數組原理及實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • Java集合系列之LinkedHashMap源碼分析

    Java集合系列之LinkedHashMap源碼分析

    這篇文章主要為大家詳細介紹了Java集合系列之LinkedHashMap源碼分析,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 通過端口1433連接到主機127.0.0.1的 TCP/IP 連接失敗,錯誤:“connect timed out”的解決方法

    通過端口1433連接到主機127.0.0.1的 TCP/IP 連接失敗,錯誤:“connect timed out”的解

    這篇文章主要介紹了通過端口1433連接到主機127.0.0.1的 TCP/IP 連接失敗,錯誤:“connect timed out”的解決方法,需要的朋友可以參考下
    2015-08-08
  • mybatis-plus?實現(xiàn)查詢表名動態(tài)修改的示例代碼

    mybatis-plus?實現(xiàn)查詢表名動態(tài)修改的示例代碼

    通過MyBatis-Plus實現(xiàn)表名的動態(tài)替換,根據配置或入參選擇不同的表,本文主要介紹了mybatis-plus?實現(xiàn)查詢表名動態(tài)修改的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • Java框架解說之BIO NIO AIO不同IO模型演進之路

    Java框架解說之BIO NIO AIO不同IO模型演進之路

    網上很多IO資料,對新手來說,越看越暈。根據自己的理解,總結對比了一下BIO、NIO、AIO,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • Java打包Jar包后使用腳本執(zhí)行

    Java打包Jar包后使用腳本執(zhí)行

    本文詳細講解了Java打包Jar包后使用腳本執(zhí)行的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • RocketMQ根據Tag進行消息過濾

    RocketMQ根據Tag進行消息過濾

    消費者訂閱了某個主題后,Apache RocketMQ 會將該主題中的所有消息投遞給消費者。若消費者只需要關注部分消息,可通過設置過濾條件在 Apache RocketMQ 服務端進行過濾,只獲取到需要關注的消息子集,避免接收到大量無效的消息
    2023-02-02

最新評論