Java Service Wrapper-簡介與使用
Java Service Wrapper就輕鬆而簡單的為我們解決了這些問題。”Java Service Wrapper”顧名思義,將我們的Java程式包裝成系統服務,這樣就可以隨著系統的執行而自動執行,當然Java Service Wrapper(下面簡稱Wrapper)的功能絕不僅於此。
Professional 和standard版本的使用需要License key,community不需要。
通過下載頁面我們可以看到Wrapper幾乎支援所有的系統環境,說明Wrapper在這方面還是很下工夫的,目前最新版本為3.5.20,我們選擇
為了更直觀的瞭解Wrapper的目錄及檔案結構,可以通過”tree”命令列出Wrapper的所有檔案樹,cmd控制檯下輸入命令:
Cmd程式碼- tree /f
- 顯示目錄結構如下:
- wrapper-linux-x86.
- │ jdoc.tar.gz //javadoc檔案
- │ README_de.txt //說明
- │ README_en.txt //說明
- │ README_es.txt //說明
- │ README_ja.txt //說明
- │
- ├─bin //執行檔案目錄
- │ demoapp //示例程式
- │ testwrapper //測試程式
- │ ★wrapper //主程式(重要)
- │
- ├─conf //配置檔案目錄
- │ demoapp.conf //示例配置檔案
- │ ★wrapper.conf //主配置檔案(重要,檔名可修改)
- │
- ├─doc //說明文件目錄
- │ index.html //首頁
- │ revisions.txt //版本說明
- │ wrapper-community-license-1.1.txt //許可協議
- │
- ├─jdoc //javadoc文件目錄
- │ index.html //首頁
- │
- ├─lib //依賴類庫目錄
- │ ★libwrapper.so //wrapper linux檔案(.so:使用者層的動態庫)
- │ ★wrapper.jar //wrapper主程式(重要)
- │ wrapperdemo.jar //示例程式
- │ wrappertest.jar //測試程式
- │
- ├─logs //日誌目錄
- │ wrapper.log //日誌檔案
- │
- └─src //原始碼目錄
- ├─bin //執行程式目錄
- │ ★sh.script.in //shell指令碼原始碼(重要)
- └─conf //配置目錄
- 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目錄執行以下命令:
- ./demoapp start
接下來會顯示很多提示,最終顯示如下頁面:
出現此頁面證明你的程式已經執行成功了,恭喜!
如果啟動失敗,我們可以檢視logs日誌內容,如下:
- STATUS | wrapper | 2013/07/3011:22:47 | –> Wrapper Started as Daemon
- STATUS | wrapper | 2013/07/3011:22:47 | Java Service Wrapper Community Edition 64-bit 3.5.20
- STATUS | wrapper | 2013/07/3011:22:47 | Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved.
- STATUS | wrapper | 2013/07/3011:22:47 | http://wrapper.tanukisoftware.com
- STATUS | wrapper | 2013/07/3011:22:47 |
- STATUS | wrapper | 2013/07/3011:22:47 | Launching a JVM…
- INFO | jvm 1 | 2013/07/3011:22:47 | WrapperManager: Initializing…
- INFO | jvm 1 | 2013/07/3011:22:47 | DemoApp: Initializing…
- INFO | jvm 1 | 2013/07/3011:22:47 | Demo: start()
- INFO | jvm 1 | 2013/07/3011:22:47 | Demo: Showing dialog…
- INFO | jvm 1 | 2013/07/3011:22:47 | Demo:
- INFO | jvm 1 | 2013/07/3011:22:47 | Demo: ERROR - Unable to display the GUI:
- INFO | jvm 1 | 2013/07/3011:22:47 | Demo: java.awt.HeadlessException:
- INFO | jvm 1 | 2013/07/3011:22:47 | No X11 DISPLAY variable was set, but this program performed an operation which requires it.
- INFO | jvm 1 | 2013/07/3011:22:47 | Demo:
- INFO | jvm 1 | 2013/07/3011:22:47 | Demo: This demo requires a display to show its GUI. Exiting…
- INFO | jvm 1 | 2013/07/3011:22:48 | Demo: stop(0)
- STATUS | wrapper | 2013/07/3011:22:49 | <– Wrapper Stopped
從日誌內容可以檢視程式及服務的執行狀態,Wrapper日誌採用此種格式:型別 | 擁有者 | 時間 | 具體內容
日誌內容顯示我們的Linux系統沒有安裝圖形介面或者根本沒有顯示卡。
注:這裡需要說明一下,Wrapper執行首先需要Java執行環境支援,所以在使用Wrapper前請先確認已安裝好了Java
下面我們來嘗試一下無引數呼叫服務的方式,如:
Shell程式碼- ./testwrapper
- ./demoapp
兩者的提示相同,都為:
Shell程式碼- Usage: ./程式名 [ console {JavaAppArgs} | start {JavaAppArgs} | stop | restart {JavaAppArgs} | condrestart {JavaAppArgs} | status | install | remove | dump ]
- Commands:
- console Launch in the current console.
- start Start in the background as a daemon process.
- stop Stop if running as a daemon or in another console.
- restart Stop if running and then start.
- condrestart Restart only if already running.
- status Query the current status.
- install Install to start automatically when system boots.
- remove Uninstall.
- dump Request a Java thread dump if running.
- JavaAppArgs: Zero or more arguments which will be passed to the Java application.
原來Wrapper提供了很多種引數的選擇,如:start為啟動,stop為停止。下面為引數的詳細解釋:
Shell程式碼- Commands:
- console 啟動並顯示控制檯資訊
- start 作為一個守護程序後臺啟動
- stop 停止程式
- restart 重啟程式
- condrestart 重啟已經執行的程式,與前者區別是程式必須已經在執行
- status 檢視該程式狀態
- install 將程式安裝為自啟動服務,即隨系統啟動而啟動
- remove 解除安裝自啟動服務
- dump 報告執行時的Java thread dump(thread dump百度百科:http://baike.baidu.com/view/5111187.htm)
我們還發現單獨執行wrapper命令時的提示內容與前面兩者不同,如下所示:
Shell程式碼- Java Service Wrapper Community Edition 64-bit 3.5.20
- Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved.
- http://wrapper.tanukisoftware.com
- Usage:
- ./wrapper <command> <configuration file> [configuration properties] […]
- ./wrapper <configuration file> [configuration properties] […]
- (<command> implicitly ’-c’)
- ./wrapper <command>
- (<configuration file> implicitly ’wrapper.conf’)
- ./wrapper
- (<command> implicitly ’-c’ and <configuration file> ‘wrapper.conf’)
- where <command> can be one of:
- -c –console run as a Console application
- -v –version print the wrapper’s version information.
- -? –help print this help message
- – <args> mark the end of Wrapper arguments. All arguments after the
- ’–’ will be passed through unmodified to the java application.
- <configuration file> is the wrapper.conf to use. Name must be absolute or relative
- to the location of ./wrapper
- [configuration properties] are configuration name-value pairs which override values
- in wrapper.conf. For example:
- wrapper.debug=true
- Please note that any file references must be absolute or relative to the location
- of the Wrapper executable.
因為wrapper是Wrapper執行的主程式也是核心,他無法單獨執行需要通過src/bin中的sh.script.in這個shell指令碼呼叫,這個檔案的使用我們之後會講到。
執行wrapper可以按如上提示新增引數,如:./wrapper -c wrapper.properties
以上就是對Wrapper的一個整體認識,希望此文可以幫助大家更快的上手並使用Wrapper,之後幾篇文章會詳細講解Wrapper的配置及定製自己的應用。