在实际开发过程中很多模块需要独立运行,他们并不会以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. wrapper-linux-x86.
  4. │  jdoc.tar.gz             //javadoc文件
  5. │  README_de.txt           //说明
  6. │  README_en.txt           //说明
  7. │  README_es.txt           //说明
  8. │  README_ja.txt           //说明
  9. ├─bin                      //执行文件目录
  10. │      demoapp             //示例程序
  11. │      testwrapper         //测试程序
  12. │      ★wrapper           //主程序(重要)
  13. ├─conf                     //配置文件目录
  14. │      demoapp.conf        //示例配置文件
  15. │      ★wrapper.conf      //主配置文件(重要,文件名可修改)
  16. ├─doc                      //说明文档目录
  17. │      index.html          //首页
  18. │      revisions.txt       //版本说明
  19. │      wrapper-community-license-1.1.txt  //许可协议
  20. ├─jdoc                     //javadoc文档目录
  21. │      index.html          //首页
  22. ├─lib                      //依赖类库目录
  23. │      ★libwrapper.so     //wrapper linux文件(.so:用户层的动态库)
  24. │      ★wrapper.jar       //wrapper主程序(重要)
  25. │      wrapperdemo.jar     //示例程序
  26. │      wrappertest.jar     //测试程序
  27. ├─logs                     //日志目录
  28. │      wrapper.log         //日志文件
  29. └─src                      //源代码目录
  30. ├─bin                  //执行程序目录
  31. │      ★sh.script.in  //shell脚本源代码(重要)
  32. └─conf                 //配置目录
  33. 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. Commands:
  3. console      Launch in the current console.
  4. start        Start in the background as a daemon process.
  5. stop         Stop if running as a daemon or in another console.
  6. restart      Stop if running and then start.
  7. condrestart  Restart only if already running.
  8. status       Query the current status.
  9. install      Install to start automatically when system boots.
  10. remove       Uninstall.
  11. dump         Request a Java thread dump if running.
  12. 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. Usage:
  5. ./wrapper <command> <configuration file> [configuration properties] [...]
  6. ./wrapper <configuration file> [configuration properties] [...]
  7. (<command> implicitly '-c')
  8. ./wrapper <command>
  9. (<configuration file> implicitly 'wrapper.conf')
  10. ./wrapper
  11. (<command> implicitly '-c' and <configuration file> 'wrapper.conf')
  12. where <command> can be one of:
  13. -c  --console run as a Console application
  14. -v  --version print the wrapper's version information.
  15. -?  --help    print this help message
  16. -- <args>     mark the end of Wrapper arguments.  All arguments after the
  17. '--' will be passed through unmodified to the java application.
  18. <configuration file> is the wrapper.conf to use.  Name must be absolute or relative
  19. to the location of ./wrapper
  20. [configuration properties] are configuration name-value pairs which override values
  21. in wrapper.conf.  For example:
  22. wrapper.debug=true
  23. Please note that any file references must be absolute or relative to the location
  24. 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

Java Service Wrapper简介与使用的更多相关文章

  1. Java Service Wrapper简介与使用(转)

    本文转自https://www.cnblogs.com/zcy_soft/p/3738947.html,写的非常好,珍藏一下 1. wrapper的意思? wrapper在此处理解为“包装”. 2. ...

  2. Java Service Wrapper 使用

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/sinat_26279177/article/details/70807173 1       简介 ...

  3. Java Service Wrapper 使用(windows)

    1       简介 最近项目中需要做一个Windows系统服务,记录一下使用过程. Java Service Wrapper 可以将Java程序包装成系统服务,这样就可以随着系统的运行而自动运行.J ...

  4. 使用 Java Service Wrapper 启动java后台进程服务

    Java Service Wrapper (http://wrapper.tanukisoftware.com/doc/english/product-overview.html)可以很方便得在各个平 ...

  5. java service wrapper 级别为info导致内存剧增直至溢出

    上周,公司某一环境发生java service wrapper内存剧增导致最后被自动killed的情况,经过分析,确定导致java service wrapper(后续简称wrapper)守护进程内存 ...

  6. 利用JAVA Service Wrapper把JAVA程序做成windows服务

    今天做了一个读取数据入库的程序.由于读取的数据每天都更新,于是就想把程序做成一个服务,每天定时执行.研究了一下,发现有几种方式可以做.下面我主要记录一下JAVA Service Wrapper方式. ...

  7. 利用Java Service Wrapper将java项目添加到windows服务中

    1.web项目,即tomcat/resin添加至window系统服务,步骤如下:第一步:找到tomcat的bin目录,如:D:\apache-tomcat-8.0.26\bin第二步:打开cmd,cd ...

  8. 使用Java Service Wrapper在Linux下配置Tomcat应用

    前言 Java Service Wrapper是Tanuki Software的一个产品,可以将Java应用注册成Windows或Linux服务,使其可以随系统开机启动,同时可以监控Java应用的状态 ...

  9. Java Service Wrapper

    Java Service Wrapper 将Java 应用程序部署成Windows系统服务Java Service Wrapper 1 Product Overview 1 Editions 2 Me ...

随机推荐

  1. 浏览器兼容innerText nextElementSibling firstElementChild

    //下面是封装的方法,可以直接使用 //获dom对象的innerText的取值 function getInnerText(element){ //判断浏览器是否支持innerText if(type ...

  2. Google疯了,竟然这样!

    导读 一个小问题:你每天做什么事?当然了,好多事情,但是我可以指出一件事,你几乎每天都会用 Google 搜索,我说的对吗?现在,如果你是一位 Linux 用户,这里有另外一个问题:如果你甚至不用离开 ...

  3. ubuntu下MySQL中文乱码(新版本Mysql修改方法)

    前几天在开发的时候出现了中文查询阿里云服务器上的mysql的时候,查询出来的值为空,找了好久终于发现原因是ubuntu下的mysql无法识别中文,这就涉及到要调整编码格式啦!!!! 然后就在网上查了许 ...

  4. php魔术方法和魔术常量

    1.__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2.__destruct() 当删除一 ...

  5. php命名空间

    命名空间概述 (PHP 5 >= 5.3.0, PHP 7) 什么是命名空间?从广义上来说,命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念.例如,在操作系统中目录用来将相关文件分 ...

  6. python之函数

    本节主要内容: 1. 上节遗留的内置函数: callable(), chr(),ord(), compile(), eval(),exec(), divmod(), isinstance() ,fil ...

  7. ios cocopods 安装使用及高级教程

    CocoaPods简介 每种语言发展到一个阶段,就会出现相应的依赖管理工具,例如Java语言的Maven,nodejs的npm.随着iOS开发者的增多,业界也出现了为iOS程序提供依赖管理的工具,它的 ...

  8. Windows无法安装到GPT分区的磁盘的解决方法

    thinkpad 预装win8的机子,硬盘采用gpt分区,在重新安装其它系统的时候是无法安装的,会提示“windows无法安装到这个磁盘,选中的磁盘采用GPT分区 形式".所以先采用下面的方 ...

  9. [译]SSAS下玩转PowerShell(二)

    上一篇中简单的介绍了SSAS下的PowerShell,这一篇会演示更多的操作,比如根据当前时间创建备份,使用变量去指定处理哪一个分区,以及用XMLA脚本去创建分区,和在PowerShell中调用Pow ...

  10. Redis到底该如何利用(二)?

    上一篇文章里我简述了使用Keys作为Redis搜索的方式,确实感受到了社区的力量,写文章好处多.首先谢谢各位前辈的指导,我知道了拿Redis作为搜索是个错误的方向.本来这篇文章我觉得确实没必要发了,但 ...