zkServer.sh 分析
来源:互联网 发布:怪物猎人ol mac 编辑:程序博客网 时间:2024/06/11 02:36
#!/usr/bin/env bash# Licensed to the Apache Software Foundation (ASF) under one or more# contributor license agreements. See the NOTICE file distributed with# this work for additional information regarding copyright ownership.# The ASF licenses this file to You under the Apache License, Version 2.0# (the "License"); you may not use this file except in compliance with# the License. You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.## If this scripted is run out of /usr/bin or some other system bin directory# it should be linked to and not copied. Things like java jar files are found# relative to the canonical path of this script.## use POSTIX interface, symlink is followed automatically#获取脚本名称,$0是shell本身的文件名ZOOBIN="${BASH_SOURCE-$0}"#dirname命令去除文件名中的非目录部分,仅显示与目录有关的内容ZOOBIN="$(dirname "${ZOOBIN}")"ZOOBINDIR="$(cd "${ZOOBIN}"; pwd)"#优先执行libexec下的zkEnv.shif [ -e "$ZOOBIN/../libexec/zkEnv.sh" ]; then . "$ZOOBINDIR/../libexec/zkEnv.sh"else . "$ZOOBINDIR/zkEnv.sh"fi# See the following page for extensive details on setting# up the JVM to accept JMX remote management:# http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html# by default we allow local JMX connectionsif [ "x$JMXLOCALONLY" = "x" ]then JMXLOCALONLY=falsefi#&2是stderrif [ "x$JMXDISABLE" = "x" ] || [ "$JMXDISABLE" = 'false' ]then echo "ZooKeeper JMX enabled by default" >&2 #如果没有指定jmx端口 if [ "x$JMXPORT" = "x" ] then # for some reason these two options are necessary on jdk6 on Ubuntu # accord to the docs they are not necessary, but otw jconsole cannot # do a local attach ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY org.apache.zookeeper.server.quorum.QuorumPeerMain" else if [ "x$JMXAUTH" = "x" ] then JMXAUTH=false fi if [ "x$JMXSSL" = "x" ] then JMXSSL=false fi if [ "x$JMXLOG4J" = "x" ] then JMXLOG4J=true fi echo "ZooKeeper remote JMX Port set to $JMXPORT" >&2 echo "ZooKeeper remote JMX authenticate set to $JMXAUTH" >&2 echo "ZooKeeper remote JMX ssl set to $JMXSSL" >&2 echo "ZooKeeper remote JMX log4j set to $JMXLOG4J" >&2 ZOOMAIN="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=$JMXPORT -Dcom.sun.management.jmxremote.authenticate=$JMXAUTH -Dcom.sun.management.jmxremote.ssl=$JMXSSL -Dzookeeper.jmx.log4j.disable=$JMXLOG4J org.apache.zookeeper.server.quorum.QuorumPeerMain" fielse echo "JMX disabled by user request" >&2 ZOOMAIN="org.apache.zookeeper.server.quorum.QuorumPeerMain"fiif [ "x$SERVER_JVMFLAGS" != "x" ]then JVMFLAGS="$SERVER_JVMFLAGS $JVMFLAGS"fi#添加到shell的第2个参数if [ "x$2" != "x" ]then ZOOCFG="$ZOOCFGDIR/$2"fi# if we give a more complicated path to the config, don't screw around in $ZOOCFGDIRif [ "x$(dirname "$ZOOCFG")" != "x$ZOOCFGDIR" ]then ZOOCFG="$2"fi#针对cygwin做特殊设置if $cygwinthen ZOOCFG=`cygpath -wp "$ZOOCFG"` # cygwin has a "kill" in the shell itself, gets confused KILL=/bin/killelse KILL=killfiecho "Using config: $ZOOCFG" >&2#针对solaris系统做特殊设置case "$OSTYPE" in*solaris*) GREP=/usr/xpg4/bin/grep ;;*) GREP=grep ;;esac#如果ZOOPIDFILE为空串if [ -z "$ZOOPIDFILE" ]; then ZOO_DATADIR="$($GREP "^[[:space:]]*dataDir" "$ZOOCFG" | sed -e 's/.*=//')" #如果$ZOO_DATADIR不存在或不是一个目录 if [ ! -d "$ZOO_DATADIR" ]; then mkdir -p "$ZOO_DATADIR" fi ZOOPIDFILE="$ZOO_DATADIR/zookeeper_server.pid"else # ensure it exists, otw stop will fail mkdir -p "$(dirname "$ZOOPIDFILE")"fi#如果ZOO_LOG_DIR不存在,或者不可写if [ ! -w "$ZOO_LOG_DIR" ] ; thenmkdir -p "$ZOO_LOG_DIR"fi_ZOO_DAEMON_OUT="$ZOO_LOG_DIR/zookeeper.out"#判断第一个参数case $1 in#起动zookeeperstart) #-n表示不换行输出 echo -n "Starting zookeeper ... " #判断这个server是否已在运行 if [ -f "$ZOOPIDFILE" ]; then if kill -0 `cat "$ZOOPIDFILE"` > /dev/null 2>&1; then echo $command already running as process `cat "$ZOOPIDFILE"`. exit 0 fi fi #核心的起动语句 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 & #如果返回值为0 if [ $? -eq 0 ] then case "$OSTYPE" in *solaris*) /bin/echo "${!}\\c" > "$ZOOPIDFILE" ;; #其它操作系统,把进程id写入文件中 *) /bin/echo -n $! > "$ZOOPIDFILE" ;; esac #输出起动成功与否的信息 if [ $? -eq 0 ]; then sleep 1 echo STARTED else echo FAILED TO WRITE PID exit 1 fi else echo SERVER DID NOT START exit 1 fi ;;#这种启动会把日志显示在控制台上start-foreground) ZOO_CMD=(exec "$JAVA") if [ "${ZOO_NOEXEC}" != "" ]; then ZOO_CMD=("$JAVA") fi "${ZOO_CMD[@]}" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \ -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" ;;#输出启动串print-cmd) echo "\"$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" ;;#停止Zookeeper服务器stop) echo -n "Stopping zookeeper ... " if [ ! -f "$ZOOPIDFILE" ] then echo "no zookeeper to stop (could not find file $ZOOPIDFILE)" else $KILL -9 $(cat "$ZOOPIDFILE") rm "$ZOOPIDFILE" echo STOPPED fi exit 0 ;;#执行UpgradeMainupgrade) shift echo "upgrading the servers to 3.*" #$@是传给脚本的所有参数的列表 "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \ -cp "$CLASSPATH" $JVMFLAGS org.apache.zookeeper.server.upgrade.UpgradeMain ${@} echo "Upgrading ... " ;;#重启Zookeeper Serverrestart) shift "$0" stop ${@} sleep 3 "$0" start ${@} ;;#查看Zookeeper server的状态status) # -q is necessary on some versions of linux where nc returns too quickly, and no stat result is output clientPortAddress=`$GREP "^[[:space:]]*clientPortAddress[^[:alpha:]]" "$ZOOCFG" | sed -e 's/.*=//'` if ! [ $clientPortAddress ] thenclientPortAddress="localhost" fi clientPort=`$GREP "^[[:space:]]*clientPort[^[:alpha:]]" "$ZOOCFG" | sed -e 's/.*=//'` STAT=`"$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" \ -cp "$CLASSPATH" $JVMFLAGS org.apache.zookeeper.client.FourLetterWordMain \ $clientPortAddress $clientPort srvr 2> /dev/null \ | $GREP Mode` if [ "x$STAT" = "x" ] then echo "Error contacting service. It is probably not running." exit 1 else echo $STAT exit 0 fi ;;*) echo "Usage: $0 {start|start-foreground|stop|restart|status|upgrade|print-cmd}" >&2esac
阅读全文
0 0
- zkServer.sh 分析
- zkServer.sh start zkServer启动失败
- zookeeper启动失败,zkServer.sh status 出错
- zookeeper启动失败,zkServer.sh status 出错
- zookeeper启动失败,zkServer.sh status 出错
- zookeeper启动失败,zkServer.sh status 出错
- sh zkServer.sh status运行出错的问题解决可能办法
- sh zkServer.sh status运行出错的问题解决可能办法
- Zookeeper命令行zkCli.sh&zkServer.sh的使用(四)
- zookeeper 脚本 zkServer.sh zkCli.sh zkCleanup.sh zkEnv.sh 详解(一)
- zookeeper 脚本 zkServer.sh zkCli.sh zkCleanup.sh zkEnv.sh 详解(二)
- zookeeper 脚本 zkServer.sh zkCli.sh zkCleanup.sh zkEnv.sh 详解(三)
- /usr/local/zookeeper-3.4.6/bin/zkServer.sh start
- Zookeeper启动成功,zkServer.sh status 报错
- bash: zkServer.sh: command not found的问题
- Zookeeper启动显示成功,zkServer.sh status报错
- Zookeeper部署 ./zkServer.sh start-foreground 启动报错
- zookeeper命令行(zkCli.sh&zkServer.sh)使用及四字命令
- python
- 13.1 初识@Controller
- 直播技术相关
- Spring Boot,Spring Data JPA多数据源支持配置
- java中的四种引用介绍,强引用,软引用,弱引用,虚引用
- zkServer.sh 分析
- HashMap源码--(二)构造器
- 学习笔记:ES6之Generator
- Redis lesson13 Redis的事务机制
- Jenkins部署Web项目到远程tomcat(四)
- Decode Ways --lintcode
- 3、Selenium + Python 实现 UI 自动化测试-元素定位
- android 绘图之双缓冲绘图
- 2017腾讯WE大会门票—早鸟票