将kafka以及zookeeper配置成windows服务,将kafka以及zookeeper配置成windows服务,开机启动的三种方式 开机启动的三种方式
将kafka或zookeeper安装成windows的服务
方式一 使用nssm软件进行配置:
1、先解压好nssm这软件,然后进入 D:\nssm-2.24\win64> 2、 .\nssm install 会弹出一个nssm service installer 3、 application path :E:\kafka_2.11-1.1.1\bin\windows\kafka-server-start.bat 4、 startup directory : E:\kafka_2.11-1.1.1\bin\windows 上面选择后会自动选择出来 5、 Arguments: E:\kafka_2.11-1.0.1\config\server.properties 6、然后记得写服务名称kafka就行了




配置zookeeper服务的时候,和kafka大体上是一致的
nssm停止服务的设置为默认设置如下:

经测试,在windows的服务管理中右键停止服务,观察对应的java进程已经停止。
方式二 commons-daemon-1.0.15-bin-windows:
1)64位系统进入amd64目录,复制 prunsrv.exe 到


2)复制 commons-daemon-1.0.15-bin-windows 目录下 prunmgr.exe 到 zookeeper/bin目录下


5.为Zookeeper配置环境变量
添加ZOOKEEPER_SERVICE,ZOOKEEPER_HOME两个环境变量
ZOOKEEPER_SERVICE:服务名称(不要有中文),我这里取的是,命名为zookeeper_service
ZOOKEEPER_HOME: 取zookeeper的目录 :
这里可以不用在环境变量里设置,而是在下面步骤编写的install.bat文件中设置上下文生效的环境变量
6.在zookeeper/bin目录下创建:zkServerStop.cmd 文件(可以创建一个txt,然后将后缀改为.cmd即可)
内容如下:
@echo off
setlocal
TASKLIST /svc | findstr /c:"%ZOOKEEPER_SERVICE%" > %ZOOKEEPER_HOME%\zookeeper_svc.pid
FOR /F "tokens=2 delims= " %%G IN (%ZOOKEEPER_HOME%\zookeeper_svc.pid) DO (
@set zkPID=%%G
)
taskkill /PID %zkPID% /T /F
del %ZOOKEEPER_HOME%/zookeeper_svc.pid
endlocal
在实际操作过程中,发现使用上面的脚本并不起作用,不能停止服务。
因为无论是zookeeper还是kafka都是使用的java.exe进程启动的,
所以本质上是要停止对应的java进程,下面的代码是采用根据端口号获取进程pid,然后kill掉pid的方式
@echo off
rem 设置监听的端口号,zookeeper默认端口号2181,kafka默认端口号9092
set port=2181
echo port : %port%
for /f "usebackq tokens=1-5" %%a in (`netstat -ano ^| findstr %port%`) do (
if [%%d] EQU [LISTENING] (
set pid=%%e
)
)
for /f "usebackq tokens=1-5" %%a in (`tasklist ^| findstr %pid%`) do (
set image_name=%%a
)
echo now will kill process : pid %pid%, image_name %image_name%
rem 根据进程ID,kill进程
taskkill /f /pid %pid%
7.在zookeeper/bin目录下创建:install.bat
内容如下:
@echo off set BASEDIR=%CD% rem 设置程序名称 set SERVICE_EN_NAME=zk_service set ZOOKEEPER_HOME=F:\zookeeper-3.6.1-binset SERVICE_CH_NAME=zookeeper_service set SRV=%ZOOKEEPER_HOME%\bin\prunsrv.exe rem 输出信息 echo SERVICE_NAME: %SERVICE_EN_NAME% echo ZOOKEEPER_HOME: %ZOOKEEPER_HOME% rem 安装 prunsrv.exe //RS//"%SERVICE_EN_NAME%" --DisplayName="Zookeeper (%SERVICE_EN_NAME%)" --Description="Zookeeper (%SERVICE_EN_NAME%)" --Startup=auto --StartMode=exe --StartPath=%ZOOKEEPER_HOME% --StartImage=%ZOOKEEPER_HOME%\bin\zkServer.cmd --StopPath=%ZOOKEEPER_HOME%\ --StopImage=%ZOOKEEPER_HOME%\bin\zkServerStop.cmd --StopMode=exe --StopTimeout=5 --LogPath=%ZOOKEEPER_HOME% --LogPrefix=zookeeper-wrapper --PidFile=zookeeper.pid --LogLevel=Info --StdOutput=auto --StdError=auto pause off
8.双击install.bat即可安装服务,再去服务里面启动即可
三 使用winsw.net
<configuration>
<!-- ID of the service. It should be unique accross the Windows system-->
<!-- id,name,修改成对应服务的名称-->
<id>ServerName</id>
<!-- Display name of the service -->
<name>ServerName</name>
<!-- Service description -->
<!-- 注释信息-->
<description>descMessage</description>
<!--服务的工作目录,可自行定义 %BASE%\ 指主目录-->
<env name="WORKING_DIR" value="%BASE%\Service" />
<!--指调用dotnet.exe所在路径-->
<env name="EXE_FILE" value="C:\Program Files\dotnet\dotnet.exe" />
<!-- Path to the executable, which should be started -->
<executable>%EXE_FILE%</executable>
<!--对应服务的dll文件名称-->
<arguments>Server.dll</arguments>
<!-- 启动参数 可自行定义其他的命令-->
<!-- <startarguments></startarguments> -->
<!-- 停止命令 -->
<!-- <stopexecutable>%WORKING_DIR%\%EXE_FILE%</stopexecutable>
<stoparguments>-s stop</stoparguments> -->
<!-- 表示启动时需要填写账号密码 -->
<!--
<serviceaccount>
<domain>YOURDOMAIN</domain>
<user>useraccount</user>
<password>Pa55w0rd</password>
<allowservicelogon>true</allowservicelogon>
</serviceaccount>
-->
<!-- 表示第一次启动延迟10s 第二次延迟20s ... -->
<onfailure action="restart" delay="10 sec"/>
<onfailure action="restart" delay="20 sec"/>
<onfailure action="restart" />
<resetfailure>1 hour</resetfailure>
<!-- 工作目录 -->
<workingdirectory>%WORKING_DIR%</workingdirectory>
<!-- 优先级 : Normal, Idle, High, RealTime, BelowNormal, AboveNormal -->
<priority>Normal</priority>
<!-- 服务停止超时时间 -->
<stoptimeout>15 sec</stoptimeout>
<!-- 是否先关主线程(WinSW) -->
<stopparentprocessfirst>false</stopparentprocessfirst>
<!--启动模式 -->
<startmode>Automatic</startmode>
<!-- 延迟启动 -->
<!--<delayedAutoStart/>-->
<!-- 依赖关系 -->
<!--
<depend>Eventlog</depend>
<depend>W32Time</depend>
-->
<!-- 未知,不要改 -->
<waithint>15 sec</waithint>
<sleeptime>1 sec</sleeptime>
<!-- 是否能跟桌面通讯 -->
<!-- <interactive/> -->
<!-- 日志的存储路径 -->
<logpath>%BASE%\logs</logpath>
<log mode="roll-by-size-time">
<sizeThreshold>10240</sizeThreshold>
<pattern>yyyyMMdd</pattern>
<autoRollAtTime>00:00:00</autoRollAtTime>
<zipOlderThanNumDays>7</zipOlderThanNumDays>
<zipDateFormat>yyyyMM</zipDateFormat>
</log>
</configuration>
在WinSW.net的文件下使用管理员身份进入命令窗口,通过命令注册服务: WinSW.NET.exe install
WinSW.NET.exe uninstall : 卸载服务
参考地址:


浙公网安备 33010602011771号