gpt4 book ai didi

windows-services - 查询Zookeeper Windows API 启动/停止,使用Zk 作为windows 服务(使用prunsrv)

转载 作者:行者123 更新时间:2023-12-04 20:08:25 24 4
gpt4 key购买 nike

我在我的产品(3.3.3)中使用了zookeeper。
在 Windows 上使用 zookeeper 时,我正在创建一个服务(使用 prunsrv),
我有几个疑问和问题。一一列举,

问题:
1)zkServer.cmd 没有在 Win server 2008 机器和 Win 7 Enterprise(64 位)上启动,必须​​替换以下行,

java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %*


java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%"
And it worked, could it be fixed in some other way?

2)在zoo.cnf中我指定了dataDir,它仍然创建了一些其他目录(bin/zookeeper-3.4.5zookeeper-3.4.5data/version-2/snapshot)并将快照存储在那里。

查询:
1) zkServer.cmd 没有启动/停止,因为它在 zkServer.sh 中,所以基本上它是用 zkServer.cmd 启动的,但要停止我执行 Ctrl+C/Z
所以如果我启动这个进程,它是一个前台进程,当我执行 ctrl+C 时会被杀死

2)我必须创建一个zookeeper服务,我正在使用prunsrv来做到这一点。我想出了以下两种方法。
a)   

prunsrv //IS//Zookeeper --DisplayName=" ZOOKEEPER Service" --Description=" ZOOKEEPER Service" --Startup=auto --StartMode=exe --StartPath=%ZOOKEEPER_HOME% --StartImage=%ZOOKEEPER_HOME%\bin\zkServer.cmd --StopTimeout=5 --LogPath=%LOGS_DIR% --LogPrefix=zookeeper --LogLevel=Info --PidFile=zookeeper.pid --StdOutput=auto --StdError=auto


b)

cd %ZOOKEEPER_HOME%\bin\
call "%~dp0zkEnv.cmd"
set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
prunsrv //IS//Zookeeper --DisplayName=" ZOOKEEPER Service" --Description=" ZOOKEEPER Service" --Jvm="%JVM_DLL%" --JvmOptions=!JAVA_OPTS! --Environment=zookeeper.log.dir=%ZOO_LOG_DIR%;zookeeper.root.logger=%ZOO_LOG4J_PROP%; --Startup=auto --LibraryPath=%LIB_DIR% --StartMode=jvm --Classpath=%CLASSPATH% %ZOOMAIN% %ZOOCFG% --StartClass=org.apache.zookeeper.server.quorum.QuorumPeerMain --StartMethod=start --StopMode=jvm --StopClass=org.apache.zookeeper.server.quorum.QuorumPeerMain --StopMethod=stop --StopTimeout=10 --LogPath=%LOGS_DIR% --LogPrefix=zookeeper --LogLevel=Info --PidFile=zookeeper.pid --StdOutput=auto --StdError=auto

基本上在第二种方法中,我自己正在完成 zkServer.cmd 完成的所有任务

=>> 我的查询在第二步(2b)中,要停止服务,应该公开一个停止方法,以便在我停止服务时调用它。
所以现在,如果我创建一个服务并启动它,ZK 运行良好,但要无限期地停止它,所以我必须去终止该进程。
是否有一些停止()相同,我看到一个关闭()但没有描述

我浏览了类org.apache.zookeeper.server.quorum.QuorumPeerMain,这里main()是启动方法(如果我的理解是正确的),应该有一些方法可以关闭进程。

刚刚得到以下链接

https://issues.apache.org/jira/browse/ZOOKEEPER-1122 , 暴露开始/停止,但停​​止有一些问题

它引发以下错误:
E:\zookeeper-3.4.5\zookeeper-3.4.5\bin>zkServer.cmd stop
"JMX enabled by default"
"Using config: E:\zookeeper-3.4.5\zookeeper-3.4.5\bin\..\conf\zoo.cfg"
"Stopping zookeeper ... "
ERROR: The process with PID 452 (child process of PID 4) could not be terminated.
Reason: This is critical system process. Taskkill cannot end this process.
ERROR: The process with PID 4 (child process of PID 0) could not be terminated.
Reason: Access is denied.
ERROR: The process with PID 0 (child process of PID 0) could not be terminated.
Reason: This is critical system process. Taskkill cannot end this process.
STOPED

我在管理员控制台上运行此停止命令。

E:\zookeeper-3.4.5\zookeeper-3.4.5\bin>任务列表 | findstr "java"
java.exe 10324 控制台 1 36,036 K。

任何帮助将不胜感激

最佳答案

所以你要做的是将 Zookeeper 作为 Windows 服务运行。我有同样的要求,这是我选择的解决方案:

  • 先决条件:Zookeeper & prunsrv
  • 套装ZOOKEEPER_SERVICE环境变量为要创建的windows服务的名称,以及ZOOKEEPER_HOME到zookeeper主文件夹的路径。然后,
    prunsrv.exe "//IS//%ZOOKEEPER_SERVICE%" ^
    --DisplayName="Zookeeper (%ZOOKEEPER_SERVICE%)" ^
    --Description="Zookeeper (%ZOOKEEPER_SERVICE%)" ^
    --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
  • 在zookeeper bin文件夹中添加一个zkServerStop.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_HOME & ZOOKEEPER_SERVICE)

  • 希望能帮助到你,
    纪尧姆。

    关于windows-services - 查询Zookeeper Windows API 启动/停止,使用Zk 作为windows 服务(使用prunsrv),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22347280/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com