近日,由于自己学习dubbo开发,需要使用到zookeeper。
(查其他安装碰到此代码的朋友也别急着走,说不定触类旁通呢。)
自己电脑是windows10的系统,在zookeeper官方下载了最新版本的zip版本。
资源路径:http://mirrors.hust.edu.cn/apache/zookeeper/
按照教程配置启动好zookeeper以后,本应顺利进入项目开发练习的。
不知道脑子为什么抽筋,想把他注册成windows服务,以方便使用,不需要每次手动启动。
然后就跑去找教程了,参考这位兄台的操作说明,一步一步进行。
原文地址:https://blog.csdn.net/xionglangs/article/details/80175721
具体操作步骤,可以参考这位兄台原文。
下面就是问题所在了。按照教程一步一步编写好文件后,到执行阶段。
卡住了!没错就是卡住了;
cmd管理员状态下,执行zkServer.cmd就卡死;
不仅cmd窗口,打开的文件夹也不能操作,甚至于我正在打开的网页也不能动了。一直持续了将近一分钟。怎么点击都不管用,任务管理器都打不开。
经过漫长的1分钟等待后,cmd窗口上显示“权限不足”,之后完了,什么也没见到,服务肯定是没注册成功的,但好歹有个详细点的提示啊!
没办法,自己分析吧!
首先分析服务安装配置文件,其中两个地方都是使用了系统环境变量。
1、此处略作修改,将服务启动文件放到跟目录下,取当前目录为zookeeper_home;代码:set ZOOKEEPER_HOME=%cd%
2、直接设置服务名;代码:set ZOOKEEPER_SERVICE=zkServer
系统安装服务,采用了apache的服务管理工具prunsrv;可以参考tomcat,gitblit;
按道理是应该生成安装日志的,为什么没有生成呢?为了方便查找,将配置中的日志目录LogPath修改为%ZOOKEEPER_HOME%\logs
LogPath=%ZOOKEEPER_HOME%\logs
这样应该会更好找到。
完整配置文件如下:
@echo off
set ZOOKEEPER_HOME=%cd%
set ZOOKEEPER_SERVICE=zkServer
%ZOOKEEPER_HOME%\bin\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%\logs --LogPrefix=zookeeper-wrapper ^
--PidFile=%ZOOKEEPER_HOME%\bin\zookeeper.pid --LogLevel=Info --StdOutput=auto --StdError=auto
重新运行服务安装;
依旧是之前的问题,不过好在日志生成了。
[2018-12-16 21:40:39] [info] [17284] Commons Daemon procrun (1.1.0.0 64-bit) started
[2018-12-16 21:40:39] [info] [17284] Service zkServer name Zookeeper (zkServer)
[2018-12-16 21:41:20] [error] [17284] 拒绝访问。
[2018-12-16 21:41:20] [error] [17284] Failed installing 'zkServer' service
[2018-12-16 21:41:20] [error] [17284] 拒绝访问。
[2018-12-16 21:41:20] [error] [17284] Commons Daemon procrun failed with exit value: 8 (Failed to install service)
[2018-12-16 21:41:20] [error] [17284] 拒绝访问。
既然出现提示了,就好解决了啊,我们有万能的百度啊!
然而……
一万个***跑过!
百度竟然没有Commons Daemon procrun failed with exit value: 8 (Failed to install service)这个错误;
相似的倒是有。 exit value: 3、 exit value: 5……然而没有什么用处。
不过有一点是确定的,拒绝访问多出现在系统权限不足的时候。毕竟cmd都要求使用管理员执行了。
搜索错误代码没结果,搜索汉字,百度不能不给面子吧!果然。
根据百度经验以及自身脑补,了解到绝逼是权限不足造成的。于是,修改两个执行程序的兼容性,均设置成管理员运行。
哈哈!
……
问题依旧。
查看用户,是管理员没毛病。
修改用户组权限到administrators
(由于对问题解决没有帮助,就不在粘贴解决过程了。)
没卵用!
必杀技,解锁系统超管administrator用户进行操作。
经过一系列解锁,设置密码,注销,重新登录,执行指令。
依旧没卵用。
濒临崩溃啊,想想zookeeper也不是太常用吧,手动启动也不是接受不来啊!为毛线折腾自己呢!
然后果断放弃了挣扎。
……
你以为这样就完了么?这怎么能体现出一个“技术宅”意(强)志(迫)力(症)
的威力。
吃完饭继续了折腾。
睡醒了继续折腾。
废话不说了。直接上答案。经过苦苦挣扎2天的时间。只能去听听音乐放松心情。
突然,是不是注册表没清理干净啊?
然后搜索不到,只好求助于360!!
等等!!
不会是360的锅吧!话说我安装程序,注册服务跟你没关系吧。
抱着催死挣扎的心退出了360;
运行注册服务指令。
尼玛,瞬间执行完毕。
情况明细有不一样啊。
立刻查看系统服务列表,果然,我期盼已久的zkservice出现了。
就此,zookeeper的坑终于填完了。服务注册成功,测试下,可以直接连接。
归根结底,耗费这么长时间,还是因为百度没有搜索到exit value:8此错误的来源。为了方便其他碰到此类问题的朋友能不像我这么折腾。特别书写了此文,希望能帮助到你们。
总结:
碰到权限不足的问题,可以从这些思路入手,就算解决不了问题,至少也可以让你在问题解决的路上前进几步。