使用java service wrapper把windows flume做成服务

简介: 使用java service wrapper把windows flume做成服务

项目有个需求,需要把windows版的flume做成AIX、unix、linux一样的服务启动。

网上介绍的方法好多种:

1、commons daemon procrun,这个是apache的一个项目,tomcat就是使用这个做成服务的,缺点:配置麻烦,对bat脚本不熟悉的话,配置起来很难

2、JavaService,这个对单个jar文件做成服务很简单,但是针对flume却不行

3、java service wrapper,配置简单,缺点:不免费

还有其他好多,我没有试。


我这里采用的是第3种,实现很简单:

首先到这里下载它的包wrapper-windows-x86-64-3.5.26-st.zip,最新版本是3.5.26。下载一个64位,注意64位的不兼容32位系统。

解压之后得到如下文件


新建一个文件夹:agent,如D:\agent,里面有bin、conf、lib、logs几个文件夹。

把wrapper-windows-x86-64-3.5.26-st\src\bin里面的*.in文件拷贝到agent\bin目录下,然后重命名把所有后缀.in去掉,变成*.bat;

再把wrapper-windows-x86-64-3.5.26-st\bin里面的wrapper.exe文件也拷贝到agent\bin目录下;

把wrapper-windows-x86-64-3.5.26-st\conf里面的wrapper.conf和wrapper-license.conf拷贝到agent\conf里面;

把wrapper-windows-x86-64-3.5.26-st\lib里面的wrapper.dll和wrapper.jar拷贝到agent\lib里面;

再把flume的所有依赖jar包也放进agent\lib里面;

最后我们来配置wrapper.conf文件:


encoding=UTF-8
#include ../conf/wrapper-license.conf
wrapper.license.debug=TRUE
wrapper.java.command=%JAVA_HOME%/bin/java
wrapper.java.command.loglevel=warn
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../lib/apache-log4j-extras-1.1.jar
wrapper.java.classpath.3=../lib/async-1.4.0.jar
wrapper.java.classpath.4=../lib/asynchbase-1.5.0.jar
wrapper.java.classpath.5=../lib/avro-1.7.3.jar
wrapper.java.classpath.6=../lib/avro-ipc-1.7.3.jar
wrapper.java.classpath.7=../lib/commons-cli-1.2.jar
wrapper.java.classpath.8=../lib/commons-codec-1.8.jar
wrapper.java.classpath.9=../lib/commons-collections-3.2.1.jar
wrapper.java.classpath.10=../lib/commons-daemon.jar
wrapper.java.classpath.11=../lib/commons-dbcp-1.4.jar
wrapper.java.classpath.12=../lib/commons-io-2.1.jar
wrapper.java.classpath.13=../lib/commons-lang-2.5.jar
wrapper.java.classpath.14=../lib/commons-logging-1.1.1.jar
wrapper.java.classpath.15=../lib/commons-pool-1.5.4.jar
wrapper.java.classpath.16=../lib/controller.jar
wrapper.java.classpath.17=../lib/cwlog.jar
wrapper.java.classpath.18=../lib/derby-10.8.2.2.jar
wrapper.java.classpath.19=../lib/et2.jar
wrapper.java.classpath.20=../lib/flume-avro-source-1.5.0.1.jar
wrapper.java.classpath.21=../lib/flume-file-channel-1.5.0.1.jar
wrapper.java.classpath.22=../lib/flume-hdfs-sink-1.5.0.1.jar
wrapper.java.classpath.23=../lib/flume-irc-sink-1.5.0.1.jar
wrapper.java.classpath.24=../lib/flume-jdbc-channel-1.5.0.1.jar
wrapper.java.classpath.25=../lib/flume-jms-source-1.5.0.1.jar
wrapper.java.classpath.26=../lib/flume-kafka-0.2.jar
wrapper.java.classpath.27=../lib/flume-kafka-plugin-0.0.1-SNAPSHOT.jar
wrapper.java.classpath.28=../lib/flume-ng-configuration-1.5.0.1.jar
wrapper.java.classpath.29=../lib/flume-ng-core-1.5.0.1.jar
wrapper.java.classpath.30=../lib/flume-ng-elasticsearch-sink-1.5.0.1.jar
wrapper.java.classpath.31=../lib/flume-ng-embedded-agent-1.5.0.1.jar
wrapper.java.classpath.32=../lib/flume-ng-extends_fat.jar
wrapper.java.classpath.33=../lib/flume-ng-hbase-sink-1.5.0.1.jar
wrapper.java.classpath.34=../lib/flume-ng-log4jappender-1.5.0.1.jar
wrapper.java.classpath.35=../lib/flume-ng-morphline-solr-sink-1.5.0.1.jar
wrapper.java.classpath.36=../lib/flume-ng-node-1.5.0.1.jar
wrapper.java.classpath.37=../lib/flume-ng-sdk-1.5.0.1.jar
wrapper.java.classpath.38=../lib/flume-ng-tailsource-1.4.0.jar
wrapper.java.classpath.39=../lib/flume-scribe-source-1.5.0.1.jar
wrapper.java.classpath.40=../lib/flume-spillable-memory-channel-1.5.0.1.jar
wrapper.java.classpath.41=../lib/flume-thrift-source-1.5.0.1.jar
wrapper.java.classpath.42=../lib/flume-tools-1.5.0.1.jar
wrapper.java.classpath.43=../lib/flume-twitter-source-1.5.0.1.jar
wrapper.java.classpath.44=../lib/gson-2.2.2.jar
wrapper.java.classpath.45=../lib/guava-11.0.2.jar
wrapper.java.classpath.46=../lib/httpclient-4.2.1.jar
wrapper.java.classpath.47=../lib/httpcore-4.2.1.jar
wrapper.java.classpath.48=../lib/irclib-1.10.jar
wrapper.java.classpath.49=../lib/jackson-core-asl-1.9.3.jar
wrapper.java.classpath.50=../lib/jackson-mapper-asl-1.9.3.jar
wrapper.java.classpath.51=../lib/jetty-6.1.26.jar
wrapper.java.classpath.52=../lib/jetty-util-6.1.26.jar
wrapper.java.classpath.53=../lib/joda-time-2.1.jar
wrapper.java.classpath.54=../lib/jsr305-1.3.9.jar
wrapper.java.classpath.55=../lib/kafkaSink.jar
wrapper.java.classpath.56=../lib/kafka_2.9.2-0.8.0-beta1.jar
wrapper.java.classpath.57=../lib/libthrift-0.7.0.jar
wrapper.java.classpath.58=../lib/log4j-1.2.17.jar
wrapper.java.classpath.59=../lib/mapdb-0.9.9.jar
wrapper.java.classpath.60=../lib/metrics-core-2.2.0.jar
wrapper.java.classpath.61=../lib/mina-core-2.0.4.jar
wrapper.java.classpath.62=../lib/netty-3.5.12.Final.jar
wrapper.java.classpath.63=../lib/paranamer-2.3.jar
wrapper.java.classpath.64=../lib/protobuf-java-2.5.0.jar
wrapper.java.classpath.65=../lib/scala-compiler-2.9.2.jar
wrapper.java.classpath.66=../lib/scala-library-2.9.2.jar
wrapper.java.classpath.67=../lib/servlet-api-2.5-20110124.jar
wrapper.java.classpath.68=../lib/slf4j-api-1.6.1.jar
wrapper.java.classpath.69=../lib/slf4j-log4j12-1.6.1.jar
wrapper.java.classpath.70=../lib/snappy-java-1.0.4.1.jar
wrapper.java.classpath.71=../lib/testerService.jar
wrapper.java.classpath.72=../lib/twitter4j-core-3.0.3.jar
wrapper.java.classpath.73=../lib/twitter4j-media-support-3.0.3.jar
wrapper.java.classpath.74=../lib/twitter4j-stream-3.0.3.jar
wrapper.java.classpath.75=../lib/velocity-1.7.jar
wrapper.java.classpath.76=../lib/zookeeper-3.4.5.jar
wrapper.java.library.path.1=../lib
wrapper.app.parameter.1=org.apache.flume.node.Application
wrapper.app.parameter.2=-f ../conf/dirsource.properties
wrapper.app.parameter.3=-n a1
wrapper.logfile=../logs/flume.log
wrapper.ntservice.name=CorewareAgentService
wrapper.ntservice.displayname=CorewareAgentService
wrapper.ntservice.description=CorewareAgentService
wrapper.ntservice.starttype=AUTO_START
wrapper.filter.trigger.1001=Exception in thread "*" java.lang.OutOfMemoryError
wrapper.filter.allow_wildcards.1001=TRUE
wrapper.filter.action.1001=RESTART
wrapper.filter.message.1001=The JVM has run out of memory.


注意的是:

一、需要把所有flume的依赖jar包都加到 wrapper.java.classpath,还需要把它自己的wrapper.jar加进去,最好放到第一个,再配置它的wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp(这个是固定的);

二、需要引进他的license文件,否则运行不能运行;

三、wrapper.java.command配置的是java.exe路径;

四、wrapper.app.parameter配置的是flume运行所需要的参数,比如主类:org.apache.flume.node.Application,配置文件、agent名字

五、wrapper.filter.trigger.1001表示如果内存溢出就重新启动


配置完之后运行agent\bin里面的App.bat,测试一下。如果没有问题就可以运行InstallApp-NT.bat来安装服务了。

安装成功之后,不会立即启动,你可以运行StartApp-NT.bat来启动服务。

UninstallApp-NT.bat是删除服务,StopApp-NT.bat是停止服务。


到此介绍结束,大家可以试试。

配置单独的jar包也是一样的,也同样可以参照上面的方法




相关文章
|
2月前
|
NoSQL Redis Windows
windows服务器重装系统之后,Redis服务如何恢复?
windows服务器重装系统之后,Redis服务如何恢复?
71 6
|
8天前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
32 11
|
1月前
|
边缘计算 安全 网络安全
|
19天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
22 3
|
22天前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
21 5
|
1月前
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
90 9
|
1月前
|
应用服务中间件 Apache Windows
免安装版的Tomcat注册为windows服务
免安装版的Tomcat注册为windows服务
107 3
|
1月前
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
35 1
|
1月前
|
Java 数据库
基于java的汽车服务管理系统(Car Service Management System)
基于java的汽车服务管理系统(Car Service Management System)
18 0
|
1月前
|
弹性计算 关系型数据库 网络安全
阿里云国际版无法连接和访问Windows服务器中的FTP服务
阿里云国际版无法连接和访问Windows服务器中的FTP服务