Java Service Wrapper簡介與使用


Java Service Wrapper簡介與使用

   在實際開發過程中很多模塊需要獨立運行,他們並不會以web形式發布,傳統的做法是將其壓縮為jar包獨立運行,這種形式簡單易行也比較利於維護,但是 一旦服務器重啟或出現異常時,程序往往無法自行修復或重啟。解決服務器重啟的傳統做法是編寫一段shell腳本隨服務器啟動而運行,但是這樣做只是治標, 那么我們想尋求一種“治本”的方式該怎么辦呢?
        Java Service Wrapper就輕松而簡單的為我們解決了這些問題。"Java Service Wrapper"顧名思義,將我們的Java程序包裝成系統服務,這樣就可以隨着系統的運行而自動運行,當然Java Service Wrapper(下面簡稱Wrapper)的功能絕不僅於此。


        Wrapper下載地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp



 

        通過下載頁面我們可以看到Wrapper幾乎支持所有的系統環境,說明Wrapper在這方面還是很下工夫的,目前最新版本為3.5.20,我們選擇Linux x86版本下載,解壓后目錄組成如下圖所示:



 

        為了更直觀的了解Wrapper的目錄及文件結構,可以通過"tree"命令列出Wrapper的所有文件樹,cmd控制台下輸入命令:

  1. tree /f  
  2.   
  3. 顯示目錄結構如下:  
  4. wrapper-linux-x86.  
  5.     │  jdoc.tar.gz             //javadoc文件  
  6.     │  README_de.txt           //說明  
  7.     │  README_en.txt           //說明  
  8.     │  README_es.txt           //說明  
  9.     │  README_ja.txt           //說明  
  10.     │  
  11.     ├─bin                      //執行文件目錄  
  12.     │      demoapp             //示例程序  
  13.     │      testwrapper         //測試程序  
  14.     │      ★wrapper           //主程序(重要)  
  15.     │  
  16.     ├─conf                     //配置文件目錄  
  17.     │      demoapp.conf        //示例配置文件  
  18.     │      ★wrapper.conf      //主配置文件(重要,文件名可修改)  
  19.     │  
  20.     ├─doc                      //說明文檔目錄  
  21.     │      index.html          //首頁  
  22.     │      revisions.txt       //版本說明  
  23.     │      wrapper-community-license-1.1.txt  //許可協議  
  24.     │  
  25.     ├─jdoc                     //javadoc文檔目錄  
  26.     │      index.html          //首頁  
  27.     │  
  28.     ├─lib                      //依賴類庫目錄  
  29.     │      ★libwrapper.so     //wrapper linux文件(.so:用戶層的動態庫)  
  30.     │      ★wrapper.jar       //wrapper主程序(重要)  
  31.     │      wrapperdemo.jar     //示例程序  
  32.     │      wrappertest.jar     //測試程序  
  33.     │  
  34.     ├─logs                     //日志目錄  
  35.     │      wrapper.log         //日志文件  
  36.     │  
  37.     └─src                      //源代碼目錄  
  38.         ├─bin                  //執行程序目錄  
  39.         │      ★sh.script.in  //shell腳本源代碼(重要)  
  40.         └─conf                 //配置目錄  
  41.             wrapper.conf.in    //原始配置  

 

        以下是官方給出的一些Wrapper的優點:

        (1) 使用我們的產品無須在你的程序中添加任何額外的代碼。
        (2) 當你的程序或JVM出現問題時會自動響應事先定制的策略。
        (3) 當出現問題時會及時進行通知。
        (4) 完善的日志記錄功能可以更好為您提供支持。
        (5) 在不同的系統上你可以指定一個標准的流程相同流程,也就是說相同的程序可以不必修改即運行於不同系統。
        (6) 可以將你的應用安裝成windows或unix的服務或守護進程。

 

        看到Wrapper有這么多好處,那么我們就通過Wrapper自帶的示例程序來進一步了解Wrapper吧:
        1.創建服務工作目錄,以操作系統為Linux,目錄結構為usr/local/wrapper為例,按照上面的目錄結構,在其下創建"bin","conf","lib","logs"這四個相同名稱的文件夾。
        2.將配置及程序文件復制至相應目錄(也就是上面標★的文件);
        (1)bin 目錄下的wrapper 文件復制到usr/local/wrapper/bin下。
        (2)src\bin 目錄下的sh.script.in 文件復制到usr/local/wrapper/bin下,並將.in后綴名刪除並修改名稱,修改后為javaService.script。
        (3)conf 目錄下的wrapper.conf 文件復制到usr/local/wrapper/conf下。
        (4)lib 目錄下的wrapper.jar 和libwrapper.so 文件復制到usr/local/wrapper/lib下。
        注:以上是正式環境所需文件的配置方式,這里我們需要運行Wrapper自帶的demo程序,所以需要將demoapp,demoapp.conf,wrapperdemo.jar 這三個文件復制到相應目錄。
        3.進入bin目錄執行以下命令:

  1. ./demoapp start  

 
        接下來會顯示很多提示,最終顯示如下頁面:



 

        出現此頁面證明你的程序已經運行成功了,恭喜!
        如果啟動失敗,我們可以查看logs日志內容,如下:

  1. STATUS | wrapper  | 2013/07/30 11:22:47 | --> Wrapper Started as Daemon  
  2. STATUS | wrapper  | 2013/07/30 11:22:47 | Java Service Wrapper Community Edition 64-bit 3.5.20  
  3. STATUS | wrapper  | 2013/07/30 11:22:47 |   Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved.  
  4. STATUS | wrapper  | 2013/07/30 11:22:47 |     http://wrapper.tanukisoftware.com  
  5. STATUS | wrapper  | 2013/07/30 11:22:47 |   
  6. STATUS | wrapper  | 2013/07/30 11:22:47 | Launching a JVM...  
  7. INFO   | jvm 1    | 2013/07/30 11:22:47 | WrapperManager: Initializing...  
  8. INFO   | jvm 1    | 2013/07/30 11:22:47 | DemoApp: Initializing...  
  9. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo: start()  
  10. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo: Showing dialog...  
  11. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo:   
  12. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo: ERROR - Unable to display the GUI:  
  13. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo:           java.awt.HeadlessException:   
  14. INFO   | jvm 1    | 2013/07/30 11:22:47 | No X11 DISPLAY variable was set, but this program performed an operation which requires it.  
  15. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo:   
  16. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo: This demo requires a display to show its GUI.  Exiting...  
  17. INFO   | jvm 1    | 2013/07/30 11:22:48 | Demo: stop(0)  
  18. STATUS | wrapper  | 2013/07/30 11:22:49 | <-- Wrapper Stopped  

 

        從日志內容可以查看程序及服務的運行狀態,Wrapper日志采用此種格式:類型 | 擁有者 | 時間 | 具體內容

        日志內容顯示我們的Linux系統沒有安裝圖形界面或者根本沒有顯卡。

        注:這里需要說明一下,Wrapper運行首先需要Java運行環境支持,所以在使用Wrapper前請先確認已安裝好了Java

 

        下面我們來嘗試一下無參數調用服務的方式,如:

  1. ./testwrapper  
  2. ./demoapp  

        兩者的提示相同,都為:

  1. Usage: ./程序 名 [ console {JavaAppArgs} | start {JavaAppArgs} | stop | restart {JavaAppArgs} | condrestart {JavaAppArgs} | status | install | remove | dump ]  
  2.   
  3. Commands:  
  4.   console      Launch in the current console.  
  5.   start        Start in the background as a daemon process.  
  6.   stop         Stop if running as a daemon or in another console.  
  7.   restart      Stop if running and then start.  
  8.   condrestart  Restart only if already running.  
  9.   status       Query the current status.  
  10.   install      Install to start automatically when system boots.  
  11.   remove       Uninstall.  
  12.   dump         Request a Java thread dump if running.  
  13.   
  14. JavaAppArgs: Zero or more arguments which will be passed to the Java application.  

 

        原來Wrapper提供了很多種參數的選擇,如:start為啟動,stop為停止。下面為參數的詳細解釋:

  1. Commands:  
  2.   console      啟動並顯示控制台信息  
  3.   start        作為一個守護進程后台啟動  
  4.   stop         停止程序  
  5.   restart      重啟程序  
  6.   condrestart  重啟已經運行的程序,與前者區別是程序必須已經在運行  
  7.   status       查看該程序狀態  
  8.   install      將程序安裝為自啟動服務,即隨系統啟動而啟動  
  9.   remove       卸載自啟動服務  
  10.   dump         報告運行時的Java thread dump(thread dump百度百科:http://baike.baidu.com/view/5111187.htm)  

 

        我們還發現單獨運行wrapper命令時的提示內容與前面兩者不同,如下所示:

  1. Java Service Wrapper Community Edition 64-bit 3.5.20  
  2.   Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved.  
  3.     http://wrapper.tanukisoftware.com  
  4.   
  5. Usage:  
  6.   ./wrapper <command> <configuration file> [configuration properties] [...]  
  7.   ./wrapper <configuration file> [configuration properties] [...]  
  8.      (<command> implicitly '-c')  
  9.   ./wrapper <command>  
  10.      (<configuration file> implicitly 'wrapper.conf')  
  11.   ./wrapper  
  12.      (<command> implicitly '-c' and <configuration file> 'wrapper.conf')  
  13.   
  14. where <command> can be one of:  
  15.   -c  --console run as a Console application  
  16.   -v  --version print the wrapper's version information.  
  17.   -?  --help    print this help message  
  18.   -- <args>     mark the end of Wrapper arguments.  All arguments after the  
  19.                 '--' will be passed through unmodified to the java application.  
  20.   
  21. <configuration file> is the wrapper.conf to use.  Name must be absolute or relative  
  22.   to the location of ./wrapper  
  23.   
  24. [configuration properties] are configuration name-value pairs which override values  
  25.   in wrapper.conf.  For example:  
  26.   wrapper.debug=true  
  27.   
  28.   Please note that any file references must be absolute or relative to the location  
  29.   of the Wrapper executable.  

 

        因為wrapper是Wrapper運行的主程序也是核心,他無法單獨運行需要通過src/bin中的sh.script.in這個shell腳本調用,這個文件的使用我們之后會講到。
        運行wrapper可以按如上提示添加參數,如:./wrapper -c wrapper.properties

        以上就是對Wrapper的一個整體認識,希望此文可以幫助大家更快的上手並使用Wrapper,之后幾篇文章會詳細講解Wrapper的配置及定制自己的應用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM