zookeeper.outの出力先

Apache ZooKeeperにおいて表題の通り。たまに忘れてしまうのでメモ。

■ 環境

  • ZooKeeper 3.4.6

■ zookeeper.out

`zkServer.sh start`を実行したカレントディレクトリに作成される。owner/groupはコマンドを実行したユーザのものとなる。

なぜコマンドを実行したカレントディレクトリになるかは、`zkEnv.sh`を見るとわかる。下記のようなコードがある。

$ cat zkEnv.sh
  :
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
    ZOO_LOG_DIR="."
fi
  :

これを元に、`zkServer.sh`の中で下記のように設定される。

$ cat zkServer.sh
  :
if [ ! -w "$ZOO_LOG_DIR" ] ; then
mkdir -p "$ZOO_LOG_DIR"
fi

_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"

case $1 in
start)
  :
    nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &
  :

よってコマンドを実行したカレントディレクトリにデフォルトでは作成されてしまう。

ここまで見ればわかるように、環境変数”ZOO_LOG_DIR“を設定しておけば、そのディレクトリに`zookeeper.out`は作成されるようになる。`.bashrc`に書いてしまうなり、コマンド実行時に下記のようにすれば良いであろう。

$ ZOO_LOG_DIR=/path/to/dir zkServer.sh start

ちなみにHomebrewでインストールしたMacにおいては、下記のようになっている。

$ cat /usr/local/Cellar/zookeeper/3.4.6_1/bin/zkServer
#!/usr/bin/env bash
. "/usr/local/etc/zookeeper/defaults"
cd "/usr/local/Cellar/zookeeper/3.4.6_1/libexec/bin"
./zkServer.sh "$@"
$

`cd`でディレクトリを移動した後に`zkServer.sh`が実行されているので、この`cd`したディレクトリに作成されているはずだ。

以上。

■ 関連