使用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包也是一样的,也同样可以参照上面的方法




相关文章
|
1月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
69 32
|
1月前
|
C# Windows
【Azure App Service】在App Service for Windows上验证能占用的内存最大值
根据以上测验,当使用App Service内存没有达到预期的值,且应用异常日志出现OutOfMemory时,就需要检查Platform的设置是否位64bit。
43 11
|
1月前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
41 3
|
2月前
|
Java 程序员 测试技术
Java|让 JUnit4 测试类自动注入 logger 和被测 Service
本文介绍如何通过自定义 IDEA 的 JUnit4 Test Class 模板,实现生成测试类时自动注入 logger 和被测 Service。
35 5
|
2月前
|
Java Linux Windows
windows版java版本管理器
本文介绍了如何在Windows上使用JDK版本管理器jvms来管理多个Java版本,包括下载、初始化、列出本地安装的JDK版本、在线查看可用版本、切换和安装特定版本的Java。
107 0
windows版java版本管理器
|
2月前
|
Java 数据库
基于java的汽车服务管理系统(Car Service Management System)
基于java的汽车服务管理系统(Car Service Management System)
27 0
|
4月前
|
Java 应用服务中间件 开发工具
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
[App Service for Windows]通过 KUDU 查看 Tomcat 配置信息
|
4月前
|
Java 应用服务中间件 Windows
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
【App Service for Windows】为 App Service 配置自定义 Tomcat 环境
|
4月前
|
PHP Windows
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
【Azure App Service for Windows】 PHP应用出现500 : The page cannot be displayed because an internal server error has occurred. 错误
|
4月前
|
网络安全 API 数据安全/隐私保护
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Windows)