將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  : 卸載服務

參考地址:

使用nssm設置文件為服務啟動

zookeeper在windows下設置為服務啟動(不需雙擊zkServer.cmd)

nssm常用命令(在Windows系統下安裝服務的工具)

通過bat腳本停止java進程的三個方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM