nan*_*ini 5 windows-services procrun apache-zookeeper
我在我的产品中使用zookeeper(3.3.3).在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%" %*
Run Code Online (Sandbox Code Playgroud)
至
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?
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
基本上在第二种方法中,我自己正在完成zkServer.cmd完成的所有任务
= >>我的查询在第二步(2b)中,为了停止服务,应该暴露一个停止方法,这样当我停止服务时,它被调用.所以现在如果我创建一个服务并启动它,ZK运行正常,但是无限期地停止它,所以我必须去杀死这个过程.是否有一些stop()相同,我看到shutdown()但没有描述
我浏览了类org.apache.zookeeper.server.quorum.QuorumPeerMain,这里main()是start方法(如果我的理解是正确的),应该有一些方法来关闭进程.
刚刚得到以下链接
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
Run Code Online (Sandbox Code Playgroud)
我在管理员控制台上运行此stop命令.
E:\ zookeeper-3.4.5\zookeeper-3.4.5\bin>任务列表| findstr"java"java.exe 10324控制台1 36,036 K.
任何帮助将受到高度赞赏
因此,您想要做的是将 Zookeeper 作为 Windows 服务运行。我有同样的要求,这是我选择的解决方案:
将环境变量设置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
Run Code Online (Sandbox Code Playgroud)在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
Run Code Online (Sandbox Code Playgroud)
(当然需要设置ZOOKEEPER_HOME
&两个环境变量)ZOOKEEPER_SERVICE
希望它有帮助,
纪尧姆。
归档时间: |
|
查看次数: |
1971 次 |
最近记录: |