本人用的版本是 apache-zookeeper-3.7.0-bin
网上说是在zkServer.cmd最后一行加入pause,就可以看到错误信息,然而我加了后,执行zkServer.cmd也还是闪退。然后百度发现pause是起到一个暂停的作用,如果在执行到之前bat就退出了,就没意义了,所以我穿插在所有行都写入一个pause,发现执行到这一行时闪退
call "%~dp0zkEnv.cmd"
这里表示是调用了zkEnv.cmd,于是我又在这个bat中每一有效行穿插pause,然后直接执行zkEnv.cmd,发现执行到这个if判断时闪退
if not exist "%JAVA_HOME%"\bin\java.exe (
echo Error: JAVA_HOME is incorrectly set: %JAVA_HOME%
echo Expected to find java.exe here: %JAVA_HOME%\bin\java.exe
goto :eof
)
在这个判断前使用echo打印:
echo "%JAVA_HOME%\bin\java.exe"
打印结果发现jdk位置是正确的:
C:\Program Files (x86)\Java\jdk1.8.0_201\bin\java.exe
然后我怀疑是Program Files (x86)这个路径存在空格或者是括号啥的特殊字符,导致无法正常识别,为了排查,复制一份java目录及其下所有文件到D盘根目录,在bat中set后再echo打印:
set JAVA_HOME=D:\Java\jdk1.8.0_201
echo "%JAVA_HOME%\bin\java.exe"
打印结果:
"D:\Java\jdk1.8.0_201\bin\java.exe"
这次终于不闪退了
综上来说,得出结论:
1.JAVA JDK 的路径尽量不要带有特殊字符、中文字符等识别会出错的字符
2.bat中不是写上了pause就一定能阻止强退的,一定要搞清楚强退的原因,才能对症下药。必要的时候每一有效行的后一行都加pause,来定位出错的位置,再进一步解决问题
后续我这边报的错为无效配置(invalid config exiting abnormally)
参考这位朋友的文章,问题得到解决
再后续,Windows中要把zoo.cfg或zoo_sample.cfg(我这边改的是zoo.cfg)中的dataDir值变更,因为该值我这边默认是linux系统的路径,要注意用目录路径用\\
dataDir=D:\\apache-zookeeper-3.7.0-bin\\data