亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何將java -jar啟動的服務設置為systemd服務管理方式

 更新時間:2025年01月03日 15:09:01   作者:學亮編程手記  
本文詳細介紹了如何將Java應用程序配置為由systemd管理的服務,包括創(chuàng)建和配置.service文件的步驟,以及如何啟動、停止和查看服務狀態(tài)

要將一個使用 java -jar 命令啟動的服務設置為由 systemd 進行管理,你需要創(chuàng)建一個 .service 文件并將其放置在 /etc/systemd/system/ 目錄下。

以下是創(chuàng)建和配置這樣一個服務文件的詳細步驟:

步驟 1: 準備工作

確定Java環(huán)境

確保系統(tǒng)中已經安裝了Java,并且知道Java的安裝路徑(如 /usr/lib/jvm/java-1.8.0-openjdk-amd64/usr/java/jdk1.8.0_211)??梢酝ㄟ^命令 which java 查找實際的可執(zhí)行文件路徑。

準備JAR文件

確認你的Java應用程序的JAR文件路徑,例如 /opt/services/myapp/myapp.jar。確保該JAR文件具有適當?shù)臋嘞?,使?systemd 用戶(通常為 root 或者 system 用戶組)能夠訪問。

步驟 2: 創(chuàng)建.service文件

使用文本編輯器(如 vi, nano, 或 gedit),創(chuàng)建一個名為 myapp.service 的文件,將其保存在 /etc/systemd/system/ 目錄下。

以下是一個基本的 .service 文件模板:

[Unit]
Description=My Java Application Service
After=network.target

[Service]
User=<非root用戶>  # 如果需要以非root用戶運行,填寫用戶名;否則可以省略此行
Group=<用戶組>     # 如果需要指定用戶組,填寫用戶組名;否則可以省略此行

Restart=on-failure  # 當服務崩潰時自動重啟
RestartSec=10s      # 重啟前等待10秒

Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64"
Environment="JAR_FILE=/opt/services/myapp/myapp.jar"

ExecStart=/usr/bin/java -jar $JAR_FILE
ExecStop=/bin/kill -SIGTERM $MAINPID

[Install]
WantedBy=multi-user.target

說明:

[Unit] 部分:

  • Description: 提供服務的簡短描述。
  • After: 指定服務應在哪些服務之后啟動,這里設置為在網絡服務 (network.target) 完成后啟動。

[Service] 部分:

  • UserGroup: 如果希望服務以非 root 用戶和用戶組運行,指定相應的用戶名和用戶組名。
  • RestartRestartSec: 設置當服務崩潰時自動重啟策略,這里是 on-failure 表示失敗時重啟,RestartSec 指定了重啟前等待的時間。
  • Environment: 設置環(huán)境變量,這里指定了 JAVA_HOME(Java安裝路徑)和 JAR_FILE(應用程序JAR文件路徑)。
  • ExecStart: 定義啟動服務的命令,使用 java -jar 命令啟動指定的JAR文件,通過 $JAR_FILE 引用之前定義的環(huán)境變量。
  • ExecStop: 定義停止服務的命令,這里使用 kill 命令發(fā)送 SIGTERM 信號給主進程ID($MAINPID),以優(yōu)雅地關閉服務。

[Install] 部分:

  • WantedBy: 指定服務應隨哪個目標(target)啟動。
  • 這里設置為 multi-user.target,意味著在多用戶系統(tǒng)(非單用戶模式或圖形界面)啟動時,該服務會被自動啟動。

步驟 3: 配置服務

更新服務配置

執(zhí)行以下命令,使 systemd 重新加載配置文件:

sudo systemctl daemon-reload

啟用服務

若要讓服務在系統(tǒng)啟動時自動運行,執(zhí)行:

sudo systemctl enable myapp.service

啟動服務

立即啟動服務:

sudo systemctl start myapp.service

檢查服務狀態(tài)

確認服務是否正常運行:

sudo systemctl status myapp.service

如果一切正常,你應該能看到服務狀態(tài)為 active (running)。

附加說明

日志管理

默認情況下,服務的標準輸出和錯誤輸出將被重定向到 systemd 的 journal。你可以使用 journalctl 命令查看服務的日志:

journalctl -u myapp.service

自定義啟動參數(shù)

如果你的Java應用需要額外的啟動參數(shù),可以在 ExecStart 行中直接添加,例如:

ExecStart=/usr/bin/java -jar $JAR_FILE --param1=value1 --param2=value2

權限與限制

根據需要,你還可以在 [Service] 部分設置資源限制(如內存、CPU限制)、工作目錄、文件描述符限制等。查閱 systemd.exec(5) 手冊頁了解更多信息。

完成以上步驟后,你的Java應用程序就已成功配置為由 systemd 管理的服務,可以方便地進行啟動、停止、重啟以及查看狀態(tài)和日志。

需要使用nohup保持后臺運行嗎

在使用 systemd 管理服務的情況下,通常不需要使用 nohup 命令來保持服務在后臺運行。

systemd 已經提供了完善的后臺服務管理機制,它能夠確保服務進程在后臺持續(xù)運行,并在必要時根據配置自動重啟服務。

在上述 myapp.service 示例中,ExecStart 參數(shù)定義了啟動服務的命令:

ExecStart=/usr/bin/java -jar $JAR_FILE

這里直接使用 java -jar 命令啟動Java應用程序,無需加上 nohup。systemd 會負責管理這個進程的生命周期,確保它在后臺運行,不受終端會話影響,并在服務停止時正確清理資源。

因此,當您按照上述步驟將Java應用程序配置為 systemd 服務后,就不需要再使用 nohup 命令來保持其后臺運行。systemd 提供的穩(wěn)定性和可靠性足以滿足大多數(shù)生產環(huán)境的需求。

如果您在Jenkins Pipeline中需要啟動這個服務,可以直接調用 systemctl start myapp.service,而不是使用 nohup java -jar ... &。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java內部類的全限定名規(guī)律代碼示例

    Java內部類的全限定名規(guī)律代碼示例

    這篇文章主要介紹了Java內部類的全限定名規(guī)律代碼示例,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • SpringCloud中的Hystrix保護機制詳解

    SpringCloud中的Hystrix保護機制詳解

    這篇文章主要介紹了SpringCloud中的Hystrix保護機制詳解,Hystrix,英文意思是豪豬,全身是刺,看起來就不好惹,是一種保護機制,Hystrix也是Netflix公司的一款組件,需要的朋友可以參考下
    2023-12-12
  • Spring Security中successHandler和failureHandler使用方式

    Spring Security中successHandler和failureHandler使用方式

    這篇文章主要介紹了Spring Security中successHandler和failureHandler使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • MyBatis-plus數(shù)據庫字段排序不準確的解決

    MyBatis-plus數(shù)據庫字段排序不準確的解決

    這篇文章主要介紹了MyBatis-plus數(shù)據庫字段排序不準確的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot排除自動加載數(shù)據源方式

    SpringBoot排除自動加載數(shù)據源方式

    這篇文章主要介紹了SpringBoot排除自動加載數(shù)據源方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • HashMap 和 HashSet的區(qū)別

    HashMap 和 HashSet的區(qū)別

    本文主要介紹HashMap 和 HashSet的區(qū)別,這里整理了詳細的資料來說名兩者的區(qū)別,并說明如何使用該方法,有需要的小伙伴可以參考下
    2016-09-09
  • Java中的BigDecimal精度運算詳解

    Java中的BigDecimal精度運算詳解

    這篇文章主要介紹了Java中的BigDecimal精度運算詳解,Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數(shù)進行精確的運算,雙精度浮點型變量double可以處理16位有效數(shù),但在實際應用中,可能需要對更大或者更小的數(shù)進行運算和處理,需要的朋友可以參考下
    2023-10-10
  • SpringCloud灰度發(fā)布的設計與實現(xiàn)詳解

    SpringCloud灰度發(fā)布的設計與實現(xiàn)詳解

    這篇文章主要介紹了SpringCloud灰度發(fā)布的設計與實現(xiàn)詳解,灰度從字面意思理解就是存在于黑與白之間的一個平滑過渡的區(qū)域,所以說對于互聯(lián)網產品來說,上線和未上線就是黑與白之分,而實現(xiàn)未上線功能平穩(wěn)過渡的一種方式就叫做灰度發(fā)布,需要的朋友可以參考下
    2023-09-09
  • 淺談Spring refresh的工作流程

    淺談Spring refresh的工作流程

    這篇文章主要介紹了淺談Spring refresh的工作流程,refresh 是 AbstractApplicationContext 中的一個方法,負責初始化 ApplicationContext容器,讓我們一起來學習一下吧
    2023-04-04
  • springboot開發(fā)擴展springmvc實現(xiàn)解析

    springboot開發(fā)擴展springmvc實現(xiàn)解析

    這篇文章主要介紹了springboot開發(fā)擴展springmvc實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02

最新評論