伪分布式的zookeeper启动报错如下:
[text@minion19 bin]$ sh zkServer.sh start ../conf/zk1.cfg
JMX enabled by defaultUsing config: ../conf/zk1.cfg
/home/text/clusters/zookeeper/zk1
mkdir: 无法创建目录"/opt/beh/logs": 权限不够
Starting zookeeper ... zkServer.sh:行108: /opt/beh/logs/zookeeper/zookeeper.out: 没有那个文件或目录
STARTED
查看zkServer.sh脚本发现:
if [ -z "$ZOOPiIDFILE" ]; then
ZOO_DATADIR="$(grep "^[[:space:]]*dataDir" "$ZOOCFG" | sed -e 's/.*=//')"
if [ ! -d "$ZOO_DATADIR" ]; then
mkdir -p "$ZOO_DATADIR"
fi
ZOOPIDFILE="$ZOO_DATADIR/zookeeper_server.pid"
else
# ensure it Iexists, otw stop will fail
mkdir -p "$(dirname "$ZOOPIDFILE")"
fi
if [ ! -w "$ZOO_LOG_DIR" ] ; then
mkdir -p "$ZOO_LOG_DIR"
蓝色处获取到了制定配置文件的正确路径但是从灰色出的ZOO_LOG_DIR确是默认的/opt/beh/logs,而并不是配置文件里dataLogDir指定的配置文件路径.
可以这样解决:
if [ -z "$ZOOPiIDFILE" ]; then
ZOO_DATADIR="$(grep "^[[:space:]]*dataDir" "$ZOOCFG" | sed -e 's/.*=//')"
ZOO_LOG_DIR=$ZOO_DATADIR"/logs"
if [ ! -d "$ZOO_DATADIR" ]; then
mkdir -p "$ZOO_DATADIR"
fi
ZOOPIDFILE="$ZOO_DATADIR/zookeeper_server.pid"
else
# ensure it Iexists, otw stop will fail
mkdir -p "$(dirname "$ZOOPIDFILE")"
fi
if [ ! -w "$ZOO_LOG_DIR" ] ; then
mkdir -p "$ZOO_LOG_DIR"
紫色处根据ZOO_DATADIR的路径来相对设置LOG_DIR就行了,我的logs是在每个zookeeper实例data路径下所以这么设置.
比如:dataDir =/opt/zk1
dataLogDir=/opt/zk1/logs