zookeeper-server-stop.sh 脚本

bash 复制代码
SIGNAL=${SIGNAL:-TERM}

OSNAME=$(uname -s)
if [[ "$OSNAME" == "OS/390" ]]; then
    if [ -z $JOBNAME ]; then
        JOBNAME="ZKEESTRT"
    fi
    PIDS=$(ps -A -o pid,jobname,comm | grep -i $JOBNAME | grep java | grep -v grep | awk '{print $1}')
elif [[ "$OSNAME" == "OS400" ]]; then
    PIDS=$(ps -Af | grep java | grep -i QuorumPeerMain | grep -v grep | awk '{print $2}')
else
    PIDS=$(ps ax | grep java | grep -i QuorumPeerMain | grep -v grep | awk '{print $1}')
fi

if [ -z "$PIDS" ]; then
  echo "No zookeeper server to stop"
  exit 1
else
  kill -s $SIGNAL $PIDS
fi

以下是 zookeeper-server-stop.sh 脚本的逐行解释:

bash 复制代码
SIGNAL=${SIGNAL:-TERM}
  • 作用 :设置信号变量 SIGNAL,默认值为 TERM(终止信号)。

  • 解释 :如果调用脚本时未通过环境变量指定 SIGNAL,则使用 TERM 作为默认信号。TERM 允许进程优雅退出。

bash 复制代码
OSNAME=$(uname -s)
  • 作用:获取当前操作系统的名称。

  • 解释 :通过 uname -s 命令获取系统类型(如 Linux、Darwin、OS/390 等),结果存入 OSNAME 变量。

bash 复制代码
if [[ "$OSNAME" == "OS/390" ]]; then
  • 作用 :检查当前操作系统是否为 IBM OS/390

  • 解释:OS/390 是 IBM 的大型机操作系统,需特殊处理。

bash 复制代码
    if [ -z $JOBNAME ]; then
        JOBNAME="ZKEESTRT"
    fi
  • 作用 :若 JOBNAME 变量未定义,则将其设为默认值 ZKEESTRT

  • 解释 :在 OS/390 中,进程可能以作业(Job)形式运行,ZKEESTRT 是 ZooKeeper 的默认作业名。

bash 复制代码
    PIDS=$(ps -A -o pid,jobname,comm | grep -i $JOBNAME | grep java | grep -v grep | awk '{print $1}')
  • 作用:获取 ZooKeeper 进程的 PID。

  • 解释

    1. ps -A -o pid,jobname,comm:列出所有进程的 PID、作业名和命令。

    2. grep -i $JOBNAME:过滤包含 JOBNAME(不区分大小写)的行。

    3. grep java:进一步筛选 Java 进程。

    4. grep -v grep:排除 grep 自身产生的行。

    5. awk '{print $1}':提取第一列(PID)。

bash 复制代码
elif [[ "$OSNAME" == "OS400" ]]; then
  • 作用 :检查操作系统是否为 IBM OS/400(AS/400)。

  • 解释:OS400 是 IBM 的中型机操作系统,需另一种处理方式。

bash 复制代码
    PIDS=$(ps -Af | grep java | grep -i QuorumPeerMain | grep -v grep | awk '{print $2}')
  • 作用:获取 ZooKeeper 进程的 PID。

  • 解释

    1. ps -Af:显示完整格式的所有进程。

    2. grep java:筛选 Java 进程。

    3. grep -i QuorumPeerMain:查找 ZooKeeper 的主类 QuorumPeerMain(集群模式入口类)。

    4. awk '{print $2}':提取第二列(PID),因为 ps -f 的 PID 列在第二位。

bash 复制代码
else
  • 作用:处理其他类 Unix 系统(如 Linux、macOS)。
bash 复制代码
    PIDS=$(ps ax | grep java | grep -i QuorumPeerMain | grep -v grep | awk '{print $1}')
  • 作用:获取 ZooKeeper 进程的 PID。

  • 解释

    1. ps ax:显示所有进程(包括其他用户的进程)。

    2. grep java:筛选 Java 进程。

    3. grep -i QuorumPeerMain:查找 ZooKeeper 主类。

    4. awk '{print $1}':提取第一列(PID)。

bash 复制代码
if [ -z "$PIDS" ]; then
  echo "No zookeeper server to stop"
  exit 1
  • 作用:检查是否找到 ZooKeeper 进程。

  • 解释 :若 PIDS 为空,输出提示信息并退出(状态码 1 表示错误)。

bash 复制代码
else
  kill -s $SIGNAL $PIDS
fi
  • 作用:向 ZooKeeper 进程发送信号。

  • 解释 :使用 kill 命令发送 SIGNAL(默认为 TERM)到所有找到的 PID,终止进程。

相关推荐
JavaPub-rodert2 天前
为什么 ZooKeeper 选择 CP,而 Eureka 选择 AP?
分布式·zookeeper·eureka
海兰2 天前
【Kafka进阶4】KRaft 完全指南:Apache Kafka 摆脱 ZooKeeper 的架构
zookeeper·kafka·apache
麻瓜记录Jackson4 天前
深入剖析 ZooKeeper 分布式 互斥锁:Curator 之 InterProcessMutex 源码全解(附图解)
java·spring boot·分布式·后端·zookeeper·java-zookeeper
爱吃面的猫13 天前
大数据Kafka3.x之——Kafka3.3.0安装与使用(详细)
大数据·分布式·zookeeper
TongSearch21 天前
使用 TongZK 做服务注册与服务发现
zookeeper·服务发现·国产化·东方通·tongzk
AI人工智能+电脑小能手23 天前
【大白话说Java面试题 第207题】【09_Zookeeper篇】第8题:谈谈 ZooKeeper 的可靠性保障机制
java·zookeeper·高可用·可靠性·分布式系统
January丶24 天前
docker-compose安装ZooKeeper集群
zookeeper
AI人工智能+电脑小能手24 天前
【大白话说Java面试题 第205题】【09_Zookeeper篇】第6题:ZooKeeper 实现分布式锁的原理
java·zookeeper·分布式锁·并发控制·分布式协调
AI人工智能+电脑小能手25 天前
【大白话说Java面试题 第203题】【09_Zookeeper篇】第4题:ZooKeeper 的节点类型有哪些?
java·zookeeper·分布式锁·分布式协调·znode
顧棟1 个月前
Zookeeper热缩容解析
linux·服务器·zookeeper