java服务安装(二):使用commons-daemon 之 procrun

Procrun是一套让Java应用程序运行在WIN#@下更容易的库和应用程序。

Procrun服务应用程序

Prunsrv一个让应用程序作为服务运行的服务程序,它能转换任一应用程序作为服务运行。

Procrun监视器应用程序

Prunmgr是一个可视化应用程序,用来监视和配置procrun服务。

可用的命令行选项:

//ES//     编辑服务的配置     这是一个默认的操作. 如果没有提供选项,可执行文件被命名为 服务名称W.exe 来调用
//MS//     服务监视器     把图标放在系统托盘中

命令行参数

每一个命令行指令的格式为 //XX//服务名

可用的命令行选项为:

//TS//     运行服务为一个控制台应用程序,这是默认的操作。可执行文件被命名为 服务名称W.exe 来调用
//RS//     运行服务     仅从服务管理器中调用
//SS//     停止服务     
//US//     更新服务参数    
//IS//     安装服务    
//DS//     删除服务,如果正在运行会停止它

命令行参数

每一个命令行参数的前缀为 -- 。如果命令行前缀为  ++ ,那么参数会被附加在已经存在的选项后面。如果提供了相同名称的环境变量作为命令行参数,但是前缀为PR_,则具有优先权。例如:

set PR_CLASSPATH=xx.jar

等同于使用

--Classpath=xx.jar

作为命令行参数。

参数名称     默认     描述
--Description         服务名称的描述 (最大1024字符)
--DisplayName     服务名称     显示的服务名称
--Install     procrun.exe //RS//ServiceName     安装镜像
--Startup     人工     服务启动模式,自动或者人工
--Type         服务  类型可以是交互式的桌面程序。使用和这个选项仅限于本地系统帐号
--DependsOn         列出服务的依赖关系。依赖的服务使用 # 或者 ; 字符分割
--Environment         列出对服务提供的环境变量,格式为 key=value 。使用 # 或者 ; 字符分割
--User         运行程序使用的的用户帐号。它仅用来StartMode模式的java或者exe,让程序作为服务运行在没有作为服务帐号的权限下运行。
--Password         --User 指定的帐号的口令
--ServiceUser         指定服务运行的帐号名称。格式为 DomainName\UserName 。服务进程以这个帐号登录,如果帐号属于内建的域,可以使用 .\UserName 的格式
--ServicePassword         通过 --ServiceUser 指定的帐号的口令
--JavaHome     JAVA_HOME     设定一个和JAVA_HOME环境变量不同的 JAVA_HOME
--Jvm     自动     使用自动或者指定全路径的jvm.dll 。你可以使用环境变量
--JvmOptions     -Xrs     以 -D 或者 -X 格式列出传递给JVM的参数。这些选项使用 # 或者 ; 字符分割。如果你需要嵌入 # 或者 ; 字符,请使用单引号把它括起来。
--Classpath         设置java类路径
--JvmMs         初始内存池,单位 MB
--JvmMx         最大内存池,单位 MB
--JvmSs         线程堆栈,单位 KB
--StartImage         将要启动的可执行程序
--StartPath         启动程序工作路径
--StartClass         用来启动的类
--StartParams         列出传递给 StartImage 或者 StartClass 的参数。参数使用 # 或者 ; 分割。
--StartMethod     Main     如果使用了不是main的方法名称
--StartMode     executable     可以是一个 jvm java或者exe程序
--StopImage         可执行程序用来发出停止服务的信号
--StopPath         停止程序的工作路径
--StopClass         停止服务的类
--StopParams         列出传递给 StopImage 或者 StopClass 的参数。参数使用 # 或者 ; 分割。
--StopMethod     Main     如果使用了不是main的方法名称
--StopMode     executable     可以是一个 jvm java或者exe程序
--StopTimeout     No Timeout     定义一个时长,单位秒,procrun等待服务优雅地退出
--LogPath     working path     日志路径
--LogPrefix     jakarta_service     定义服务日志文件名
--LogLevel     INFO     定义日志级别error 、 info 、 warn 、 debug
--StdOutput         重定向的stdout文件名称
--StdError         重定向的stderr文件名称


安装服务

你需要使用 //IS// 参数

安装名为 'TestService'的服务

prunsrv //IS//TestService --DisplayName="Test Service" \--Install=prunsrv.exe --Jvm=auto --StartMode=jvm --StopMode=jvm \--StartClass=org.apache.SomeStartClass --StartParams=arg1;arg2;arg3 \--StopClass=org.apache.SomeStopClass --StopParams=arg1#arg2 \

更新服务

你需要使用 //US// 参数

更新名为 'TestService'的服务

prunsrv //US//TestService --Description="Some Dummy Test Service" \--Startup=auto --Classpath=%CLASSPATH%;test.jar

移除服务

你需要使用 //DS// 参数。如果服务正在运行,它会停止它,然后删除。

移除名为 'TestService' 的服务
prunsrv //DS//TestService

调试服务

运行服务为控制台模式,你需要使用 //TS// 参数。服务可以使用CTRL+C or CTRL+BREAK中断。如果你把prunsrv.exe改名为testservice.exe,你仅需要执行the testservice.exe,这个命令模式被默认执行。

在控制台模式运行名为 'TestService'的服务

prunsrv //TS//TestService [additional arguments]

    • 1概述
      • 1_1为什么使用commons daemon
      • 1_2commons daemon介绍
      • 1_3本文主要内容
    • 2程序示例
    • 3linux下使用commons-daemon
      • 3_1下载commons-daemon
      • 3_2安装jsvc
      • 3_3编写程序入口类
      • 3_4编写安装脚本
      • 3_5程序打包及启动
    • 4windows下使用commons-daemon
      • 4_1下载commons-daemon及procrun
      • 4_2编写程序入口类
      • 4_3编写安装脚本
      • 4_4程序打包及安装
    • 5附件

1、概述

1_1、为什么使用commons daemon

上一篇已对使用java service wrapper工具与java程序集成进行了讲解,
java service wrapper使用简单,集成方法简单,不修改任何代码,一般情况下已满足需求。但是,java service wrapper只对java程序的开启及关闭进行操作,若需要对程序启动前及关闭前进行一些自定义的操作(如启动时初始化工作,关闭时释放某些资源或进行特殊操作),此时就可以使用apache commons daemon了。

1_2、commons daemon介绍

Apache common deamon是用来提供java服务的安装,实现将一个普通的 Java 应用变成系统的一个后台服务,在linux下部署为后台运行程序,在windows部署为windows服务(著名的tomcat就是使用它实现启动及停止的。提供启动、停止、卸载等操作)。详细介绍可见commons-daemon官网。相对java service wrapper,commons daemon需要自己写少许代码,即按规定要求编写程序启动及关闭的入口类,仅此而已。

1_3、本文主要内容

本文主要讲解两部分内容:

  • linux下使用commons-daemon把java安装为后台运行程序
  • windows下使用commons-daemon把java安装为windows服务

2、程序示例

本文示例程序与上一篇的示例(log4j+java service wrapper)放在同一工程(因此上一篇的示例本程序也适用),不过改为使用logback+commons-daemon。程序结构如下:
java服务安装(二):使用commons-daemon 之 procrun_第1张图片
说明:

  • 主要DaemonMainClassForLinux、DaemonMainClassForWindows及LogbackFileLogger类及logback.xml,其它的(WrapperMainClassForWindows、FileLogger及log4j.properties)是属于上一篇的示例。
  • install目录是用于对程序封装为服务的,即存放wrapper或daemon的,daemon目录下有linux及windows的安装内容
  • src/main/assembly下存放打包成自定义格式的maven配置(分别是linux及windows)
  • pom.xml配置打包插件信息

使用assembly打包,打包出windows包及linux包,包结构是bin,classes和lib三个目录,分别是安装目录,java程序,依赖包,如下所示:
打包结果
java服务安装(二):使用commons-daemon 之 procrun_第2张图片

3、linux下使用commons-daemon

linux下使用commons-daemon主要通过commons-daemon主程序及jsvc实现。本示例环境是centos6.5。

3_1、下载commons-daemon

到commons-daemon官网下载,其中需要下载commons-daemon主程序和jsvc包(源码包)。如下图:
java服务安装(二):使用commons-daemon 之 procrun_第3张图片

  • 下载commons-daemon-1.0.15-bin.tar.gz,解压出commons-daemon-1.0.15.jar放到程序目录中(本示例为install/daemon),以便使用。
  • 下载commons-daemon-1.0.15-src.tar.gz源码包,此程序用于在linux下使用源码方式安装jsvc。(提醒:在官网的jsvc只讲解了如休安装及使用,源码需要在这里下载)。

3_2、安装jsvc

可先查看官网的jsvc,本示例中安装如下:把commons-daemon源码包放到/opt目录下。操作如下:

[root@localhost]# cd /opt/jsvc
[root@localhost jsvc]# unzip commons-daemon-1.0.15-src.zip
[root@localhost jsvc]# cd /opt/jsvc/commons-daemon-1.0.15-src/src/native/unix
[root@localhost unix]# ./configure --with-java=/usr/java/jdk1.8.0_51
*** All done ***
Now you can issue "make"
[root@localhost unix]# make
gcc   jsvc-unix.o libservice.a -ldl -lpthread -o ../jsvc
make[1]: 离开目录“/opt/jsvc/commons-daemon-1.0.15-src/src/native/unix/native
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

说明

  • 确保linux上已安装java,安装需依赖java,如上述操作中--with-java=/usr/java/jdk1.8.0_51
  • make完后,会在commons-daemon-1.0.15-src/src/native/unix下生成jsvc文件如下图:
    jsvc
  • 记住此jsvc路径,安装时使用。

3_3、编写程序入口类

程序实际的功能很简单,如下(见LogbackFileLogger类):

public class LogbackFileLogger {
    private static Logger logger = LoggerFactory.getLogger(LogbackFileLogger.class);

    public void logInfo2file() {
        for (int i = 0; i < 50; i++) {
            logger.info("我的测试:my test{}", i);
            try {
                //睡眠一秒以维持服务运行
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                logger.error(e.getMessage(),e);
            }
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

入口类只需要实现init,destroy,start,stop方法即可,安装时指定此类,jsvc会根据这些方法进行初始化、启动、关闭等操作。程序如下:

/**
 * Linux服务安装入口类
 * 
 * @author mason
 *
 */
public class DaemonMainClassForLinux {
    public static void init(String[] args) {
        //日志输出到程序根目录(classpath)
        MainClass.initWorkDir();
    }

    public static void destroy() {
    }

    public static void start() {
        LogbackFileLogger logger = new LogbackFileLogger();
        logger.logInfo2file();
    }

    public static void stop() {
        System.exit(0);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

说明:

  • init方法有参数,destroy、start及stop方法无参。
  • 本示例中的初始化MainClass.initWorkDir();用于指定日志输出的目录。
  • start方法作启动入口,stop方法为关闭,本示例简单退出程序,若需要自定义操作,可在此方法编写即可。

3_4、编写安装脚本

安装脚本在示例install/daemon/linux下,主要设置程序名称,路径,jsvc路径,java路径,程序入口类,日志输出目录即可。详细如下:

#!/bin/sh
# description: jsw-test
# processname: jsw-test
# chkconfig: 234 20 80

# 程序名称
SERVICE_NAME=jsw-test
#程序路径获取相对路径,可填写绝对路径,如APP_HOME=/usr/local/bingo_cdp/deploy/bingo-cdp-timerjob-linux
APP_HOME=$(dirname $(pwd))
EXEC=/opt/jsvc/commons-daemon-1.0.15-src/src/native/unix/jsvc
JAVA_HOME=/usr/java/jdk1.8.0_51

#依赖路径
cd ${APP_HOME}
CLASS_PATH="$PWD/classes":"$PWD/lib/*"

#程序入口类
CLASS=main.DaemonMainClassForLinux

#程序ID文件
PID=${APP_HOME}/${SERVICE_NAME}.pid
#日志输出路径
LOG_OUT=${APP_HOME}/logs/${SERVICE_NAME}.out
LOG_ERR=${APP_HOME}/logs/${SERVICE_NAME}.err

#输出
echo "service name: $SERVICE_NAME"
echo "app home: $APP_HOME"
echo "jsvc: $EXEC"
echo "java home: $JAVA_HOME"
echo "class path: $CLASS_PATH"
echo "main class: $CLASS"

#执行
do_exec()
{
    $EXEC -home "$JAVA_HOME" -Dsun.jnu.encoding=UTF-8 -Dfile.encoding=UTF-8 -Djcifs.smb.client.dfs.disabled=false -Djcifs.resolveOrder=DNS -Xms512M -Xmx1024M -cp $CLASS_PATH -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS
}

#根据参数执行
case "$1" in
    start)
        do_exec
        echo "${SERVICE_NAME} started"
            ;;
    stop)
        do_exec "-stop"
        echo "${SERVICE_NAME} stopped"
            ;;
    restart)
        if [ -f "$PID" ]; then
            do_exec "-stop"
            do_exec
            echo "${SERVICE_NAME} restarted"
        else
            echo "service not running, will do nothing"
            exit 1
        fi
            ;;
    status)
        ps -ef | grep jsvc
        ;;
    *)
        echo "usage: service ${SERVICE_NAME} {start|stop|restart|status}" >&2
        exit 3
        ;;
esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67

一般还需要把程序作为系统服务开机启动,因此本示例中提供了set_auto_start.sh文件,注意修改相应的文件名称:

#!/bin/bash

DAEMON_HOME=$(pwd)
AUTO_RUN_FILE=${DAEMON_HOME}/jsw-test.sh
AUTO_RUN_FILE_NAME=jsw-test

echo "设置${AUTO_RUN_FILE_NAME}开机启动......"

#若文件不存在,报错、否则设置开机启动
if [ ! -f "${AUTO_RUN_FILE}" ]; then 
    echo "${AUTO_RUN_FILE} 不存在,请检查文件!"
else
    \cp -f ${AUTO_RUN_FILE} /etc/init.d/${AUTO_RUN_FILE_NAME}
    chmod 777 /etc/init.d/${AUTO_RUN_FILE_NAME} 
    chkconfig --add ${AUTO_RUN_FILE_NAME} 
    chkconfig ${AUTO_RUN_FILE_NAME} on 
fi

echo "设置${AUTO_RUN_FILE_NAME}开机启动结束"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

3_5、程序打包及启动

使用maven的assembly插件打包,流程可见上一篇,当前示例打linux的zip包,具体配置如下:
pom.xml

<execution>
    <id>make-daemon-linux-zipid>
    <phase>packagephase>
    <goals>
        <goal>singlegoal>
    goals>
    <configuration>
        <finalName>jsw-testfinalName>
        <appendAssemblyId>trueappendAssemblyId>
        <outputDirectory>${project.build.directory}outputDirectory>
        <descriptors>
            <descriptor>src/main/assembly/daemon-linux-zip.xmldescriptor>
        descriptors>
    configuration>
execution>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

daemon-linux-zip.xml

<assembly>
    <id>deamon-linuxid>
    <formats>
        <format>zipformat>
    formats>
    <includeBaseDirectory>falseincludeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <useProjectArtifact>falseuseProjectArtifact>
            <outputDirectory>/liboutputDirectory>
        dependencySet>
    dependencySets>
    <fileSets>
        <fileSet>
            
            <directory>${project.build.directory}/classesdirectory>
            <outputDirectory>/classesoutputDirectory>
        fileSet>
        <fileSet>
            <directory>install/daemondirectory>
            <includes>
                <include>commons-daemon-1.0.15.jarinclude>
            includes>
            <outputDirectory>/liboutputDirectory>
        fileSet>
        <fileSet>
            
            <directory>install/daemon/linuxdirectory>
            <includes>
                <include>jsw-test.shinclude>
                <include>set_auto_start.shinclude>
            includes>
            <outputDirectory>/binoutputDirectory>
        fileSet>
    fileSets>
assembly>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

程序包(jsw-test-deamon-linux.zip)打出来后,即可放到linux下进行部署,部署过程如下:

[root@localhost opt]# unzip jsw-test-deamon-linux.zip -d jsw-test
[root@localhost opt]# cd jsw-test/bin
[root@localhost bin]# chmod 777 *.sh
[root@localhost bin]# ./jsw-test.sh start
  • 1
  • 2
  • 3
  • 4

说明:

  • 本示例中放到/opt下,解压,修改执行权限,执行。(start,stop,restart参数)。
  • 日志文件按脚本设置的目录,输出在/opt/jsw-test/logs,其下查看启动日志:jsw-test.err jsw-test.out
  • /opt/jsw-test/classes/logs下查看程序使用logback的输出。

4、windows下使用commons-daemon

windows下使用commons-daemon安装服务跟linux下流程上差不多,差别是使用procrun,脚本的编写。

4_1、下载commons-daemon及procrun

跟linux一样,到commons-daemon官网下载。

  • 下载commons-daemon主程序(commons-daemon-1.0.15-bin.zip),解压出commons-daemon-1.0.15.jar,也可以使用前面下载的jar包。
  • 下载procrun,官网的procrun页面只对它的使用进行讲解,在哪里下载即没有提及,这里特别提醒一下,需要在这里下载procrun,下载commons-daemon-1.0.15-bin-windows.zip。解压出文件如下:
    java服务安装(二):使用commons-daemon 之 procrun_第4张图片
    复制commons-daemon-1.0.15.jar,prunmgr.exe及prunsrv.exe到安装目录(见本示例中为install及install/windows)。

4_2、编写程序入口类

跟linux下的入口类不同,入口类只需要实现start,stop方法,安装时指定此类,procrun会根据这些方法进启动、关闭操作。注意:与linux的不同,此两个方法需要带参数,否则会报找不到start方法错误,程序如下:

/**
 * Windows服务安装入口类
 * 
 * @author mason
 *
 */
public class DaemonMainClassForWindows {

    public static void start(String[] args) {
        // 日志输出到程序根目录(classpath)
        MainClass.initWorkDir();
        LogbackFileLogger logger = new LogbackFileLogger();
        logger.logInfo2file();
    }

    public static void stop(String[] args) {
        System.exit(0);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

4_3、编写安装脚本

使用procrun安装成服务,需写bat脚本进行安装(见示例中的install/daemon/windows目录下的install.bat,uninstall.bat)。主要是设置服务名称,java路径,依赖类,入口类,prunsrv路径,日志路径。注意jvm的大小参数请根据实际情况修改详细如下:
install.bat:

@echo off

rem 设置程序名称
set SERVICE_EN_NAME=jsw-test
set SERVICE_CH_NAME=jsw测试程序

rem 设置java路径
set JAVA_HOME=E:\Program Files\Java\jdk1.8.0_51

rem 设置程序依赖及程序入口类
cd..
set BASEDIR=%CD%
set CLASSPATH=%BASEDIR%\classes;%BASEDIR%\lib\*
set MAIN_CLASS=main.DaemonMainClassForWindows

rem 设置prunsrv路径 
set SRV=%BASEDIR%\bin\prunsrv.exe

rem 设置日志路径及日志文件前缀
set LOGPATH=%BASEDIR%\logs

rem 输出信息
echo SERVICE_NAME: %SERVICE_EN_NAME%
echo JAVA_HOME: %JAVA_HOME%
echo MAIN_CLASS: %MAIN_CLASS%
echo prunsrv path: %SRV%

rem 设置jvm
if "%JVM%" == "" goto findJvm
if exist "%JVM%" goto foundJvm
:findJvm
set "JVM=%JAVA_HOME%\jre\bin\server\jvm.dll"
if exist "%JVM%" goto foundJvm
echo can not find jvm.dll automatically,
echo please use COMMAND to localation it
echo for example : set "JVM=C:\Program Files\Java\jdk1.8.0_25\jre\bin\server\jvm.dll"
echo then install service
goto end
:foundJvm

rem 安装
"%SRV%" //IS//%SERVICE_EN_NAME% --DisplayName="%SERVICE_CH_NAME%" "--Classpath=%CLASSPATH%" "--Install=%SRV%" "--JavaHome=%JAVA_HOME%" "--Jvm=%JVM%" --JvmMs=256 --JvmMx=1024 --Startup=auto --JvmOptions=-Djcifs.smb.client.dfs.disabled=false ++JvmOptions=-Djcifs.resolveOrder=DNS "--StartPath=%BASEDIR%" --StartMode=jvm --StartClass=%MAIN_CLASS% --StartMethod=start "--StopPath=%BASEDIR%" --StopMode=jvm --StopClass=%MAIN_CLASS% --StopMethod=stop --LogPath=%LOGPATH% --StdOutput=auto --StdError=auto

:end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

uninstall.bat:

@echo off
cd..
set BASEDIR=%CD%
set SERVICE_NAME=jsw-test
set "SRV=%BASEDIR%\bin\prunsrv.exe"

%SRV% //DS//%SERVICE_NAME%

:end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

一般安装好服务后,则可在控制面板-管理程序-服务中进行启动,关闭管理。若需要使用脚本启动,可使用prunmgr.exe进行管理,编写如下:

@echo off
cd..
set BASEDIR=%CD%
set SERVICE_NAME=prunmgr
set MONITOR_PATH=%BASEDIR%\bin\prunmgr.exe
echo start %SERVICE_NAME% 

%MONITOR_PATH% //MR//%SERVICE_NAME%

:end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4_4、程序打包及安装

使用maven的assembly插件打包,流程可见上一篇,当前示例打windows的zip包,具体配置如下:
pom.xml

<execution>
    <id>make-daemon-win-zipid>
    <phase>packagephase>
    <goals>
        <goal>singlegoal>
    goals>
    <configuration>
        <finalName>jsw-testfinalName>
        <appendAssemblyId>trueappendAssemblyId>
        <outputDirectory>${project.build.directory}outputDirectory>
        <descriptors>
            <descriptor>src/main/assembly/daemon-win-zip.xmldescriptor>
        descriptors>
    configuration>
execution>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

daemon-win-zip.xml

<assembly>
    <id>daemon-winid>
    <formats>
        <format>zipformat>
    formats>
    <includeBaseDirectory>falseincludeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <useProjectArtifact>falseuseProjectArtifact>
            <outputDirectory>/liboutputDirectory>
        dependencySet>
    dependencySets>
    <fileSets>
        <fileSet>
            
            <directory>${project.build.directory}/classesdirectory>
            <outputDirectory>/classesoutputDirectory>
        fileSet>
        <fileSet>
            <directory>install/daemondirectory>
            <includes>
                <include>commons-daemon-1.0.15.jarinclude>
            includes>
            <outputDirectory>/liboutputDirectory>
        fileSet>
        <fileSet>
            
            <directory>install/daemon/windowsdirectory>
            <outputDirectory>/binoutputDirectory>
        fileSet>
    fileSets>
assembly>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

程序包(jsw-test-deamon-win.zip)打出来后,即可放到windows目录下进行部署,部署过程如下:

  • 解压jsw-test-deamon-win.zip到jsw-test-deamon-win目录,打开bin目录,运行install.bat。注意:运行弹出窗口,运行时间有点长,需等待。
  • 成功安装后,可在控制面板-管理程序-服务中进行启动,关闭管理。
  • 日志文件按脚本设置的目录,输出在jsw-test-daemon-win/logs,其下查看启动日志:jsw-test-stderr.2016-07-04.log,jsw-test-stdout.2016-07-04.log
  • jsw-test-daemon-win/classes/logs下查看程序使用logback的输出

5、附件

jsw-test.zip; 密码: uryd











你可能感兴趣的:(java服务安装(二):使用commons-daemon 之 procrun)