转自:http://blog.sina.com.cn/s/blog_62c5db6e01011jzx.html
启动zookeeper时, 偶尔会遇到一个错误:
$ bin/zkServer.sh start
JMX enabled by default
Using config: /home/nauhcud/workspace/zookeeper/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... bin/zkServer.sh: 162: cannot create /tmp/zookeeper/zookeeper_server.pid: Directory nonexistent
FAILED TO WRITE PID
查看进程发现zookeeper进程存在, 并可以正常使用. dataDir "
/tmp/zookeeper/" 也在。文件
zookeeper_server.pid不在。
查看启动脚本, 发现start逻辑如下:
start)
...
...
纵观整个脚本, dataDir没有出现, 因此, dataDir应该是zookeeper进程内部建立的, 并且有一定延迟, 因此
将zookeeper进程id写入到dataDir下的pidfile时, dataDir还没有建立好, 因此就出现了上述情况.
解决办法很简单, 在写入pid之前先判断一下datadir是否存在, 让zookeeper有时间做完初始化, 然后再将pid写入即可.
start)
...
...