近日,由于自己学习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都要求使用管理员执行了。
搜索错误代码没结果,搜索汉字,百度不能不给面子吧!果然。
根据百度经验以及自身脑补,了解到绝逼是权限不足造成的。于是,修改两个执行程序的兼容性,均设置成管理员运行。

哈哈!
……
问题依旧。

  1. 难道用户权限不足?

查看用户,是管理员没毛病。
修改用户组权限到administrators
(由于对问题解决没有帮助,就不在粘贴解决过程了。)
没卵用!

  1. 是不是自建用户不行啊?

必杀技,解锁系统超管administrator用户进行操作。
经过一系列解锁,设置密码,注销,重新登录,执行指令。
依旧没卵用。

  1. 是不是有系统提示授权,因为系统设置没有弹出来啊?
    百度下,修改用户账户控制设置,改为最高。只要是框就弹出!
    依旧没卵用。

濒临崩溃啊,想想zookeeper也不是太常用吧,手动启动也不是接受不来啊!为毛线折腾自己呢!

然后果断放弃了挣扎。
……
你以为这样就完了么?这怎么能体现出一个“技术宅”意(强)志(迫)力(症)的威力。
吃完饭继续了折腾。
睡醒了继续折腾。

废话不说了。直接上答案。经过苦苦挣扎2天的时间。只能去听听音乐放松心情。

突然,是不是注册表没清理干净啊?
然后搜索不到,只好求助于360!!

等等!!
不会是360的锅吧!话说我安装程序,注册服务跟你没关系吧。
抱着催死挣扎的心退出了360;

运行注册服务指令。
尼玛,瞬间执行完毕。
情况明细有不一样啊。
立刻查看系统服务列表,果然,我期盼已久的zkservice出现了。
就此,zookeeper的坑终于填完了。服务注册成功,测试下,可以直接连接。

归根结底,耗费这么长时间,还是因为百度没有搜索到exit value:8此错误的来源。为了方便其他碰到此类问题的朋友能不像我这么折腾。特别书写了此文,希望能帮助到你们。

总结:
碰到权限不足的问题,可以从这些思路入手,就算解决不了问题,至少也可以让你在问题解决的路上前进几步。

  1. 修改需要执行程序的兼容性,设置成管理员运行
  2. 修改用户权限,设置成管理员
  3. 解锁超级管理员进行操作
  4. 修改用户账户控制设置
  5. 清理注册表
  6. 关闭360
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐