找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3018

积分

1

好友

408

主题
发表于 2025-12-12 22:26:38 | 查看: 71| 回复: 0

使用前配置

本脚本适用于通过源码编译方式安装在 /usr/local/redis 目录下的 Redis 服务。在使用前,你需要根据自己服务器的实际部署情况,调整脚本开头的几个变量值。

核心变量配置:

  • REDIS_PATH: Redis 的安装根目录。
  • REDIS_PORT: Redis 服务监听的端口,默认为 6379。
  • REDIS_CONF: Redis 配置文件 redis.conf 的绝对路径。
  • REDIS_SERVER: redis-server 可执行文件的路径。
  • REDIS_CLI: redis-cli 可执行文件的路径。
  • REDIS_LOG: Redis 的日志文件路径,需与 redis.conf 中的 logfile 配置一致。

依赖检查:
脚本通过 lsof 命令根据端口号查找进程 PID 以判断服务状态。请确保系统已安装此工具。

  • CentOS/RHEL: sudo yum install -y lsof
  • Ubuntu/Debian: sudo apt install -y lsof

脚本功能与使用

将以下脚本保存为 redis.sh,并赋予执行权限 (chmod +x redis.sh),即可通过简单的命令参数来管理你的 Redis 服务。

#!/bin/bash

# ----- Redis 服务管理脚本 -----
# 适用于安装在 /usr/local/redis/ 的 Redis 服务
# 需要根据实际情况修改路径和端口

REDIS_PATH="/usr/local/redis"
REDIS_PORT="6379"
REDIS_CONF="${REDIS_PATH}/redis.conf"
REDIS_SERVER="/usr/local/bin/redis-server"
REDIS_CLI="/usr/local/bin/redis-cli"
REDIS_LOG="/data/redis/redis.log"

# 帮助信息
show_help() {
    echo "Redis 服务管理脚本 - 用于管理安装在 ${REDIS_PATH} 的 Redis 服务"
    echo "用法: $0 [选项]"
    echo "选项:"
    echo "  start      启动服务"
    echo "  stop       停止服务"
    echo "  restart    重启服务"
    echo "  status     查看状态"
    echo "  log        实时查看日志"
    echo "  help       显示此帮助信息"
}

# 检查 Redis 状态
status_redis() {
    if ! command -v lsof &> /dev/null; then
        echo "错误:lsof 未安装,请先安装 lsof 工具 (sudo yum install lsof 或 sudo apt install lsof)"
        return 1
    fi
    PID=$(/usr/bin/lsof -t -i ":${REDIS_PORT}" -s TCP:LISTEN 2>/dev/null)
    if [ -n "${PID}" ] && kill -0 "${PID}" 2>/dev/null; then
        echo "服务状态:运行中 (PID: ${PID})"
        return 0
    else
        echo "服务状态:已停止"
        return 1
    fi
}

# 启动 Redis 服务
start_redis() {
    status_redis  >/dev/null 2>&1
    [ $? -eq 0 ] && echo "服务已在运行中" && return 0
    echo "正在启动 Redis 服务..."
    ${REDIS_SERVER} "${REDIS_CONF}" >/dev/null 2>&1 &
    sleep 1  # 等待服务启动
    status_redis  >/dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "Redis 启动成功"
        return 0
    else
        echo "错误:Redis 启动失败,请检查日志: ${REDIS_LOG}"
        return 1
    fi
}

# 停止 Redis 服务
stop_redis() {
    status_redis >/dev/null 2>&1
    [ $? -ne 0 ] && echo "服务未运行" && return 0
    echo "正在停止 Redis 服务..."
    if ${REDIS_CLI} -p "${REDIS_PORT}" shutdown save >/dev/null 2>&1; then
        sleep 2
        status_redis >/dev/null 2>&1
        [ $? -ne 0 ]  && echo "Redis 已停止" && return 0
    fi
    # 优雅停止失败时强制终止
    PID=$(/usr/bin/lsof -t -i ":${REDIS_PORT}" -s TCP:LISTEN 2>/dev/null)
    if [ -n "${PID}" ]; then
        echo "警告:优雅停止失败,尝试强制终止 (PID: ${PID})"
        kill -9 "${PID}" 2>/dev/null
        sleep 1
        [ ! -d "/proc/${PID}" ] && echo "服务已强制终止" && return 0
    fi
    echo "错误:停止服务失败,请手动检查"
    return 1
}

# 重启 Redis 服务
restart_redis() {
    stop_redis
    [ $? -eq 0 ] && sleep 3 && start_redis
}

# 查看实时日志
log_redis() {
    if [ ! -f "${REDIS_LOG}" ]; then
        echo "错误:日志文件不存在: ${REDIS_LOG}"
        echo "提示:请检查 redis.conf 中的 logfile 配置"
        return 1
    fi
    echo "正在跟踪日志文件: ${REDIS_LOG} (按 Ctrl+C 退出)"
    tail -f "${REDIS_LOG}"
}

# 主函数
main() {
    case "$1" in
        start | "")
            start_redis
            ;;
        stop)
            stop_redis
            ;;
        restart)
            restart_redis
            ;;
        status)
            status_redis
            ;;
        log)
            log_redis
            ;;
        help)
            show_help
            ;;
        *)
            echo "无效选项: $1"
            show_help
            exit 1
            ;;
    esac
}

# 检查 Redis 可执行文件是否存在
check_prerequisites() {
    [ ! -f "${REDIS_SERVER}" ] && echo "错误:redis-server 不存在: ${REDIS_SERVER}" && exit 1
    [ ! -f "${REDIS_CLI}" ] && echo "错误:redis-cli 不存在: ${REDIS_CLI}" && exit 1
    [ ! -f "${REDIS_CONF}" ] && echo "错误:配置文件不存在: ${REDIS_CONF}" && exit 1
   #[ ! -f "${REDIS_LOG}" ] && echo "错误:日志文件不存在: ${REDIS_LOG}" && exit 1
}

check_prerequisites
main "$@"

命令详解

执行脚本时,需要带上相应的功能参数:

./redis.sh help

输出脚本的帮助信息,展示所有可用命令。

./redis.sh status

检查 Redis 服务的运行状态。该功能依赖于 lsof 这个强大的 运维 工具来查询指定端口的监听进程。

./redis.sh start

启动 Redis 服务。如果服务已经在运行,会有相应提示。

./redis.sh stop

停止 Redis 服务。脚本会优先尝试通过 redis-cli shutdown 进行优雅停止,保存数据。如果失败,则会自动尝试强制终止进程。

./redis.sh restart

重启 Redis 服务,相当于依次执行 stopstart

./redis.sh log

实时查看 Redis 的日志输出,方便排查问题。使用 Ctrl+C 键退出日志跟踪模式。

提示:直接运行 ./redis.sh 不跟任何参数,默认执行启动 (start) 操作。




上一篇:战牛股!JAVAEE股票金融行情项目实战 从入门到精通 Spring Cloud Alibaba微服务架构深度解析与高并发交易系统构建
下一篇:Thymeleaf SSTI漏洞演进与绕过史:从3.0.11到3.1.3版本安全修复深度分析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-2 00:30 , Processed in 0.284192 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表