卸载redis7.2.4的shell脚本

保存文件:uninstall_redis.sh

执行:chmod +x uninstall_redis.sh

执行:./uninstall_redis.sh

bash 复制代码
#!/bin/bash

# Redis自动化卸载脚本 for CentOS 7
# 日期:$(date +%Y-%m-%d)

set -e  # 遇到错误时退出脚本

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${GREEN}[INFO]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

log_step() {
    echo -e "${BLUE}[STEP]${NC} $(date '+%Y-%m-%d %H:%M:%S') - $1"
}

# 检查是否以root用户运行
check_root() {
    if [[ $EUID -ne 0 ]]; then
        log_error "此脚本必须以root用户运行"
    fi
}

# 配置参数(与安装脚本一致)
REDIS_VERSION="7.2.4"
INSTALL_DIR="/usr/local/redis"
CONF_DIR="${INSTALL_DIR}/etc"
LOG_DIR="/var/log/redis"
DATA_DIR="/var/lib/redis"
TMP_DIR="/tmp/redis_build"
REDIS_USER="redis"
REDIS_GROUP="redis"
REDIS_PORT="6379"

# 停止并禁用Redis服务
stop_redis_service() {
    log_step "停止并禁用Redis服务..."
    
    # 停止服务
    if systemctl is-active --quiet redis; then
        systemctl stop redis
        log_info "Redis服务已停止"
    else
        log_info "Redis服务未运行"
    fi
    
    # 禁用开机自启
    if systemctl is-enabled --quiet redis; then
        systemctl disable redis
        log_info "Redis开机自启已禁用"
    else
        log_info "Redis开机自启已禁用"
    fi
    
    # 重新加载systemd
    systemctl daemon-reload
}

# 删除systemd服务文件
remove_systemd_service() {
    log_step "删除systemd服务文件..."
    
    # 删除服务文件
    if [ -f "/etc/systemd/system/redis.service" ]; then
        rm -f /etc/systemd/system/redis.service
        log_info "已删除 /etc/systemd/system/redis.service"
    else
        log_info "服务文件不存在"
    fi
    
    # 重新加载systemd
    systemctl daemon-reload
}

# 删除Redis安装目录
remove_redis_installation() {
    log_step "删除Redis安装目录..."
    
    if [ -d "${INSTALL_DIR}" ]; then
        rm -rf ${INSTALL_DIR}
        log_info "已删除安装目录: ${INSTALL_DIR}"
    else
        log_info "安装目录不存在: ${INSTALL_DIR}"
    fi
}

# 删除日志目录
remove_log_directory() {
    log_step "删除Redis日志目录..."
    
    if [ -d "${LOG_DIR}" ]; then
        rm -rf ${LOG_DIR}
        log_info "已删除日志目录: ${LOG_DIR}"
    else
        log_info "日志目录不存在: ${LOG_DIR}"
    fi
}

# 删除数据目录
remove_data_directory() {
    log_step "删除Redis数据目录..."
    
    if [ -d "${DATA_DIR}" ]; then
        rm -rf ${DATA_DIR}
        log_info "已删除数据目录: ${DATA_DIR}"
    else
        log_info "数据目录不存在: ${DATA_DIR}"
    fi
}

# 删除临时目录
remove_temp_directory() {
    log_step "删除临时目录..."
    
    if [ -d "${TMP_DIR}" ]; then
        rm -rf ${TMP_DIR}
        log_info "已删除临时目录: ${TMP_DIR}"
    else
        log_info "临时目录不存在: ${TMP_DIR}"
    fi
}

# 删除运行时PID文件
remove_pid_files() {
    log_step "删除运行时PID文件..."
    
    # 删除PID文件
    if [ -f "/var/run/redis_${REDIS_PORT}.pid" ]; then
        rm -f /var/run/redis_${REDIS_PORT}.pid
        log_info "已删除PID文件: /var/run/redis_${REDIS_PORT}.pid"
    else
        log_info "PID文件不存在: /var/run/redis_${REDIS_PORT}.pid"
    fi
}

# 删除用户和组
remove_redis_user_group() {
    log_step "删除Redis用户和组..."
    
    # 删除用户
    if id -u ${REDIS_USER} >/dev/null 2>&1; then
        userdel ${REDIS_USER}
        log_info "已删除用户: ${REDIS_USER}"
    else
        log_info "用户不存在: ${REDIS_USER}"
    fi
    
    # 删除组
    if getent group ${REDIS_GROUP} >/dev/null 2>&1; then
        groupdel ${REDIS_GROUP}
        log_info "已删除组: ${REDIS_GROUP}"
    else
        log_info "组不存在: ${REDIS_GROUP}"
    fi
}

# 清理防火墙配置
cleanup_firewall() {
    log_step "清理防火墙配置..."
    
    if systemctl is-active --quiet firewalld; then
        log_info "防火墙正在运行,移除Redis端口规则..."
        firewall-cmd --permanent --remove-port=${REDIS_PORT}/tcp 2>/dev/null || true
        firewall-cmd --reload 2>/dev/null || true
        log_info "防火墙规则已移除 (端口: ${REDIS_PORT})"
    else
        log_info "防火墙未运行,跳过配置清理"
    fi
}

# 清理系统配置
cleanup_system_config() {
    log_step "清理系统配置..."
    
    # 清理rc.local中的Redis优化配置
    if grep -q "# Redis优化" /etc/rc.local; then
        sed -i '/# Redis优化 - 禁用透明大页/,+4d' /etc/rc.local
        log_info "已清理rc.local中的Redis配置"
    else
        log_info "rc.local中无Redis配置"
    fi
    
    # 清理sysctl.conf中的Redis配置
    if grep -q "# Redis优化参数" /etc/sysctl.conf; then
        sed -i '/# Redis优化参数/,+5d' /etc/sysctl.conf
        # 应用内核参数
        sysctl -p 2>/dev/null || true
        log_info "已清理sysctl.conf中的Redis配置"
    else
        log_info "sysctl.conf中无Redis配置"
    fi
    
    # 清理limits.conf中的Redis配置
    if grep -q "# Redis文件描述符限制" /etc/security/limits.conf; then
        sed -i '/# Redis文件描述符限制/,+4d' /etc/security/limits.conf
        log_info "已清理limits.conf中的Redis配置"
    else
        log_info "limits.conf中无Redis配置"
    fi
}

# 主函数
main() {
    log_step "开始卸载Redis ${REDIS_VERSION}"
    
    echo -e "${YELLOW}警告: 此操作将完全删除Redis及其所有相关文件和配置!${NC}"
    echo -n "确认继续吗? (输入 'yes' 确认): "
    read confirmation
    
    if [ "$confirmation" != "yes" ]; then
        log_info "取消卸载操作"
        exit 0
    fi
    
    # 执行卸载步骤
    check_root
    stop_redis_service
    remove_systemd_service
    remove_redis_installation
    remove_log_directory
    remove_data_directory
    remove_temp_directory
    remove_pid_files
    remove_redis_user_group
    cleanup_firewall
    cleanup_system_config
    
    log_step "==================== Redis卸载完成 ===================="
    echo "Redis ${REDIS_VERSION} 已成功卸载!"
    echo "以下项目已被删除:"
    echo "  - Redis安装目录: ${INSTALL_DIR}"
    echo "  - Redis日志目录: ${LOG_DIR}"
    echo "  - Redis数据目录: ${DATA_DIR}"
    echo "  - Redis临时目录: ${TMP_DIR}"
    echo "  - Redis PID文件: /var/run/redis_${REDIS_PORT}.pid"
    echo "  - Redis用户和组: ${REDIS_USER}:${REDIS_GROUP}"
    echo "  - systemd服务: /etc/systemd/system/redis.service"
    echo "  - 防火墙规则: 端口 ${REDIS_PORT}"
    echo ""
    echo "注意: 系统级别的依赖包未被删除,如需删除请手动处理"
    log_step "====================================================="
}

# 执行主函数
main "$@"
相关推荐
Doro再努力21 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp21 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
Doro再努力21 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene21 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
忧郁的橙子.21 小时前
02-本地部署Ollama、Python
linux·运维·服务器
醇氧1 天前
【linux】查看发行版信息
linux·运维·服务器
No8g攻城狮1 天前
【Linux】Windows11 安装 WSL2 并运行 Ubuntu 22.04 详细操作步骤
linux·运维·ubuntu
XiaoFan0121 天前
免密批量抓取日志并集中输出
java·linux·服务器
souyuanzhanvip1 天前
ServerBox v1.0.1316 跨平台 Linux 服务器管理工具
linux·运维·服务器
HalvmånEver1 天前
Linux:线程互斥
java·linux·运维