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

linux中nohup?java?-jar啟動(dòng)java項(xiàng)目的步驟

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

理解nohup命令

nohup命令的基本概念

nohup是一個(gè)常用的Unix命令,用于在忽略掛起信號(hào)(SIGHUP)的情況下運(yùn)行指定的命令或進(jìn)程。當(dāng)用戶注銷或關(guān)閉終端時(shí),通常后臺(tái)運(yùn)行的進(jìn)程會(huì)收到SIGHUP信號(hào)而終止。使用nohup可以避免這種情況,使得進(jìn)程即使在用戶注銷后也能繼續(xù)運(yùn)行。

nohup的工作原理

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

nohup與后臺(tái)進(jìn)程的區(qū)別

后臺(tái)進(jìn)程可以通過在命令后添加&符號(hào)來啟動(dòng),如command &。然而,后臺(tái)進(jìn)程在用戶注銷后通常無法繼續(xù)運(yùn)行,因?yàn)樗鼈儠?huì)收到SIGHUP信號(hào)。與之相比,nohup啟動(dòng)的進(jìn)程則不會(huì)受到用戶注銷的影響。

示例:使用nohup啟動(dòng)Java應(yīng)用

假設(shè)我們有一個(gè)名為MyApp.jar的Java應(yīng)用程序,我們希望在后臺(tái)運(yùn)行它,即使用戶注銷或關(guān)閉終端,應(yīng)用也能持續(xù)運(yùn)行。

啟動(dòng)命令

nohup java -jar MyApp.jar &

這個(gè)命令做了以下幾件事:

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

輸出重定向

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

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

這里:

  • >:將標(biāo)準(zhǔn)輸出重定向到output.log文件。
  • 2>&1:將標(biāo)準(zhǔn)錯(cuò)誤也重定向到同一個(gè)文件。

查看進(jìn)程狀態(tài)

可以使用ps命令查看nohup啟動(dòng)的進(jìn)程狀態(tài):

ps -ef | grep MyApp.jar

停止進(jìn)程

要停止由nohup啟動(dòng)的進(jìn)程,可以使用kill命令結(jié)合進(jìn)程ID(PID):

kill -9 PID

其中,PIDps命令查詢到的進(jìn)程ID。

案例源碼說明

以下是使用nohup啟動(dòng)Java應(yīng)用的完整示例,包括啟動(dòng)、輸出重定向和進(jìn)程管理:

啟動(dòng)Java應(yīng)用

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

查看進(jìn)程

ps -ef | grep MyApp.jar

停止進(jìn)程

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

在這個(gè)例子中,pgrep -f MyApp.jar用于查找所有與MyApp.jar相關(guān)的進(jìn)程,然后kill -9發(fā)送SIGKILL信號(hào)以強(qiáng)制終止進(jìn)程。

Java項(xiàng)目打包與部署

Java項(xiàng)目的打包流程

Java項(xiàng)目打包通常指的是將編譯后的.class文件及其依賴項(xiàng)打包成一個(gè)可執(zhí)行的JAR(Java Archive)文件。這個(gè)過程可以通過多種工具完成,其中最常用的是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>

然后運(yùn)行Maven命令來打包項(xiàng)目:

mvn clean package

使用Gradle打包

build.gradle文件中配置Jar任務(wù):

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

然后運(yùn)行Gradle命令來打包項(xiàng)目:

gradle build

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

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

Maven案例源碼

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

Gradle案例源碼

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

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

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

環(huán)境準(zhǔn)備

  • 確保服務(wù)器上安裝了正確版本的JDK。
  • 配置環(huán)境變量,如JAVA_HOME指向JDK安裝目錄。
  • 確保服務(wù)器有適當(dāng)?shù)臋?quán)限設(shè)置,以便應(yīng)用程序可以運(yùn)行。

部署策略

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

案例源碼說明

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

Maven部署案例

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

Gradle部署案例

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

一旦JAR文件上傳到服務(wù)器,就可以使用之前提到的nohup命令來啟動(dòng)Java應(yīng)用程序。

使用nohup啟動(dòng)Java項(xiàng)目的步驟

準(zhǔn)備啟動(dòng)腳本

在部署Java項(xiàng)目后,創(chuàng)建一個(gè)啟動(dòng)腳本可以簡(jiǎn)化啟動(dòng)過程,并允許更靈活地管理Java應(yīng)用。以下是一個(gè)簡(jiǎn)單的啟動(dòng)腳本示例:

#!/bin/bash

# Java應(yīng)用的JAR文件路徑
JAR_PATH="/path/to/MyApp.jar"

# 定義日志文件輸出路徑
LOG_FILE="/path/to/MyApp.log"

# 使用nohup命令啟動(dòng)Java應(yīng)用,并將輸出重定向到日志文件
nohup java -jar $JAR_PATH > $LOG_FILE 2>&1 &

# 回顯啟動(dòng)信息
echo "Java application started. Check the log at $LOG_FILE"

確保將/path/to/MyApp.jar/path/to/MyApp.log替換為實(shí)際的JAR文件路徑和日志文件路徑。

配置環(huán)境變量

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

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

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

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

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

啟動(dòng)命令的完整示例

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

# 運(yùn)行啟動(dòng)腳本
./start-app.sh

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

chmod +x start-app.sh

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

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

查看進(jìn)程

使用ps命令查看Java應(yīng)用的進(jìn)程信息:

ps -ef | grep java

查看日志

檢查之前定義的日志文件以了解應(yīng)用的運(yùn)行狀況:

tail -f /path/to/MyApp.log

停止應(yīng)用

如果需要停止應(yīng)用,可以使用kill命令結(jié)合進(jìn)程ID(PID):

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

案例源碼說明

假設(shè)我們有一個(gè)名為MyApp.jar的Java應(yīng)用程序,我們希望在服務(wù)器上自動(dòng)啟動(dòng)它,并確保它在后臺(tái)穩(wěn)定運(yùn)行。

啟動(dòng)腳本start-app.sh

#!/bin/bash

# 設(shè)置環(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"

# 啟動(dòng)Java應(yīng)用,并將輸出重定向到日志文件
nohup java -jar $JAR_PATH > $LOG_PATH 2>&1 &

echo "Application started. Check logs at $LOG_PATH"

給腳本賦予權(quán)限

chmod +x start-app.sh

啟動(dòng)應(yīng)用

./start-app.sh

監(jiān)控應(yīng)用

# 查看進(jìn)程
ps -ef | grep java

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

停止應(yīng)用

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

總結(jié)  

到此這篇關(guān)于linux中nohup java -jar啟動(dòng)java項(xiàng)目的文章就介紹到這了,更多相關(guān)nohup java -jar啟動(dòng)java項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

    Java等待喚醒機(jī)制線程通信原理解析

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

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

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

    SpringBoot項(xiàng)目使用mybatis-plus代碼生成的實(shí)例詳解

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

    Sparsearray稀疏數(shù)組原理及實(shí)例詳解

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

    Java集合系列之LinkedHashMap源碼分析

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

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

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

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

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

    Java框架解說之BIO NIO AIO不同IO模型演進(jìn)之路

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

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

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

    RocketMQ根據(jù)Tag進(jìn)行消息過濾

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

最新評(píng)論