ZooKeeper自定义数据日志目录

安装版本: zookeeper-3.4.8
问题描述:
ZooKeeper在启动时会将zookeeper.out输出到当前目录,不仅不友好,有时候可能会因为目录权限问题引发一些不必要的麻烦。
脚本分析:
通过查看zkServer.sh脚本可以发现,脚本中没有定义 ZOO_LOG_DIR变量。
114 if [ -z "$ZOOPIDFILE" ]; then
115     ZOO_DATADIR="$($GREP "^[[:space:]]*dataDir" "$ZOOCFG" | sed -e 's/.*=//')"
116     if [ ! -d "$ZOO_DATADIR" ]; then
117         mkdir -p "$ZOO_DATADIR"
118     fi
119     ZOOPIDFILE="$ZOO_DATADIR/zookeeper_server.pid"
120 else
121     # ensure it exists, otw stop will fail
122     mkdir -p "$(dirname "$ZOOPIDFILE")"
123 fi
124 
125 if [ ! -w "$ZOO_LOG_DIR" ] ; then
126 mkdir -p "$ZOO_LOG_DIR"
127 fi
128 
129 _ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"
解决方案:
一、导出 ZOO_LOG_DIR环境变量
如:export ZOO_LOG_DIR=/opt/zookeeper-3.4.8/logs
二、完善zkServer.sh脚本
1.修改zoo.cfg文件,增加dataLogDir参数
如:
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
2.修改zkServer.sh脚本,增加 ZOO_LOG_DIR变量赋值
125 ZOO_LOG_DIR="$($GREP "^[[:space:]]*dataLogDir" "$ZOOCFG" | sed -e 's/.*=//')"
126 if [ ! -w "$ZOO_LOG_DIR" ] ; then
127 mkdir -p "$ZOO_LOG_DIR"
128 fi
129 
130 _ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"
以上方案,根据自己需要选择其中一个即可。

你可能感兴趣的:(Java)