使用 Shell 脚本管理 RocketMQ 服务:启动、停止与状态检查

在分布式系统中,RocketMQ 是一个流行的消息队列中间件。在开发和运维过程中,能够高效地启动、停止和检查 RocketMQ 相关服务的状态非常重要。本文将介绍如何使用 Shell 脚本来管理 RocketMQ 的 Name Server、Broker 和 Dashboard 服务,并提供相应的脚本示例和说明。
安装可以查看这篇博客RocketMQ 实战:在 macOS 上安装与前端访问全流程指南

1. 脚本概述

这个脚本将涵盖以下功能:

  • 启动 RocketMQ Name Server、Broker 和 Dashboard。
  • 停止 RocketMQ Name Server、Broker 和 Dashboard。
  • 检查 RocketMQ Name Server、Broker 和 Dashboard 的运行状态。
  • 显示脚本的使用帮助信息。
2. 脚本内容
#!/bin/bash

# RocketMQ 目录路径,请根据实际路径修改
ROCKETMQ_HOME="/Users/mac/Java/rocketmq-all-5.3.0-bin-release"

# 日志文件目录,请根据实际路径修改
LOG_DIR="$HOME/logs/rocketmqlogs"

# Dashboard JAR 文件路径,请根据实际路径修改
DASHBOARD_JAR_PATH="/Users/mac/Java/rocketmq-dashboard/target/rocketmq-dashboard-1.0.1-SNAPSHOT.jar"

# 启动 Name Server
start_nameserver() {
    echo "启动 RocketMQ Name Server..."
    nohup sh $ROCKETMQ_HOME/bin/mqnamesrv &> $LOG_DIR/namesrv.log &
    sleep 3  # 等待启动进程稳定
    if ps -ef | grep -v grep | grep -q mqnamesrv; then
        echo "Name Server 启动成功。"
    else
        echo "Name Server 启动失败,请检查日志:$LOG_DIR/namesrv.log"
        exit 1
    fi
}

# 启动 Broker
start_broker() {
    echo "启动 RocketMQ Broker..."
    nohup sh $ROCKETMQ_HOME/bin/mqbroker -n localhost:9876 --enable-proxy &> $LOG_DIR/broker.log &
    sleep 3  # 等待启动进程稳定
    if ps -ef | grep -v grep | grep -q mqbroker; then
        echo "Broker 启动成功。"
    else
        echo "Broker 启动失败,请检查日志:$LOG_DIR/broker.log"
        exit 1
    fi
}

# 启动 RocketMQ Dashboard
start_dashboard() {
    echo "启动 RocketMQ Dashboard..."

    # 检查端口 8080 是否被占用
    PORT=8080
    DASHBOARD_PID=$(lsof -i:$PORT -t)

    if [ -n "$DASHBOARD_PID" ]; then
        echo "端口 $PORT 已被占用,正在尝试杀死进程 $DASHBOARD_PID..."
        kill -9 $DASHBOARD_PID
    fi

    # 启动 Dashboard
    nohup java -jar $DASHBOARD_JAR_PATH --rocketmq.config.namesrvAddr=localhost:9876 &> $LOG_DIR/dashboard.log &
    sleep 9 # 等待启动进程稳定

    # 检查日志文件以确认启动状态
    if grep -q "Web server failed to start. Port 8080 was already in use" $LOG_DIR/dashboard.log; then
        echo "RocketMQ Dashboard 启动失败,端口 8080 已被占用。请检查日志:$LOG_DIR/dashboard.log"
        exit 1
    elif grep -q "Started App" $LOG_DIR/dashboard.log; then
        echo "RocketMQ Dashboard 启动成功。"
    else
        echo "RocketMQ Dashboard 启动失败。请检查日志:$LOG_DIR/dashboard.log"
        exit 1
    fi
}

# 关闭 Name Server
stop_nameserver() {
    echo "关闭 RocketMQ Name Server..."
    sh $ROCKETMQ_HOME/bin/mqshutdown namesrv
    if [ $? -eq 0 ]; then
        echo "Name Server 已关闭。"
    else
        echo "Name Server 关闭失败。"
    fi
}

# 关闭 Broker
stop_broker() {
    echo "关闭 RocketMQ Broker..."
    sh $ROCKETMQ_HOME/bin/mqshutdown broker
    if [ $? -eq 0 ]; then
        echo "Broker 已关闭。"
    else
        echo "Broker 关闭失败。"
    fi
}

# 关闭 RocketMQ Dashboard
stop_dashboard() {
    echo "关闭 RocketMQ Dashboard..."

    # 获取监听 8080 端口的进程 ID
    DASHBOARD_PID=$(lsof -i:8080 -t)

    if [ -n "$DASHBOARD_PID" ]; then
        echo "发现 RocketMQ Dashboard 进程,PID: $DASHBOARD_PID,正在关闭..."
        kill -9 $DASHBOARD_PID
        echo "RocketMQ Dashboard 已关闭。"
    else
        echo "RocketMQ Dashboard 未运行或端口 8080 未被占用。"
    fi
}

# 检查进程状态
check_status() {
    echo "检查 RocketMQ 进程状态..."
    echo "Name Server 进程:"
    ps -ef | grep mqnamesrv | grep -v grep
    echo "Broker 进程:"
    ps -ef | grep mqbroker | grep -v grep
    echo "Dashboard 进程:"
    if lsof -i:8080 | grep -q LISTEN; then
        echo "RocketMQ Dashboard 正在运行,监听端口 8080。"
        lsof -i:8080 | grep LISTEN
    else
        echo "RocketMQ Dashboard 未运行。"
    fi
}

# 脚本帮助信息
help() {
    echo "RocketMQ 管理脚本"
    echo "用法: $0 {start|stop|status|help}"
    echo "  start   启动 Name Server、Broker 和 Dashboard"
    echo "  stop    关闭 Name Server、Broker 和 Dashboard"
    echo "  status  检查 Name Server、Broker 和 Dashboard 的运行状态"
    echo "  help    显示此帮助信息"
}

# 主程序逻辑
case "$1" in
    start)
        start_dashboard
        start_nameserver
        start_broker
        ;;
    stop)
        stop_dashboard
        stop_broker
        stop_nameserver
        ;;
    status)
        check_status
        ;;
    help|*)
        help
        ;;
esac

exit 0
3. 脚本说明
  1. 启动服务

    • start_nameserver:启动 RocketMQ Name Server,检查进程是否成功启动。
    • start_broker:启动 RocketMQ Broker,检查进程是否成功启动。
    • start_dashboard:启动 RocketMQ Dashboard,检查端口是否被占用,并通过日志确认服务是否成功启动。
  2. 停止服务

    • stop_nameserver:关闭 RocketMQ Name Server。
    • stop_broker:关闭 RocketMQ Broker。
    • stop_dashboard:关闭 RocketMQ Dashboard,通过检查端口来获取进程 ID 并杀死进程。
  3. 检查状态

    • check_status:检查 RocketMQ Name Server、Broker 和 Dashboard 的运行状态。
  4. 帮助信息

    • help:显示脚本的使用帮助信息。
4. 使用方法
  1. 保存脚本:将上述脚本保存为 rocketmq_manager.sh
  2. 赋予执行权限:运行 chmod +x rocketmq_manager.sh 以赋予执行权限。
  3. 执行脚本
    • 启动所有服务:./rocketmq_manager.sh start
    • 停止所有服务:./rocketmq_manager.sh stop
    • 检查服务状态:./rocketmq_manager.sh status
    • 显示帮助信息:./rocketmq_manager.sh help

通过使用这个脚本,你可以高效地管理 RocketMQ 的 Name Server、Broker 和 Dashboard 服务,简化日常操作和维护任务。

你可能感兴趣的:(rocketmq)