1. 程式人生 > >【TCP三次握手過程】Java Service Wrapper簡介與使用 --- 學習中

【TCP三次握手過程】Java Service Wrapper簡介與使用 --- 學習中

ava 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控制檯下輸入命令:

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目錄執行以下命令:

Shell程式碼  收藏程式碼

  1. ./demoapp start  

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



 

        出現此頁面證明你的程式已經執行成功了,恭喜!
        如果啟動失敗,我們可以檢視logs日誌內容,如下:

Log程式碼  收藏程式碼

  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

 

        下面我們來嘗試一下無引數呼叫服務的方式,如:

Shell程式碼  收藏程式碼

  1. ./testwrapper  
  2. ./demoapp  

        兩者的提示相同,都為:

Shell程式碼  收藏程式碼

  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為停止。下面為引數的詳細解釋:

Shell程式碼  收藏程式碼

  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命令時的提示內容與前面兩者不同,如下所示:

Shell程式碼  收藏程式碼

  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的配置及定製自己的應用。

 

轉自:http://286.iteye.com/blog/1915478