Linux安装Redis(PS:附脚本)

这是一个用于自动化管理Redis的Shell脚本,包括安装、卸载、启动、停止和重启操作。脚本首先确保必要的依赖环境已安装,然后进行编译安装Redis,并配置相关参数如后台运行、绑定IP、日志文件和密码(如果提供)。安装完成后,Redis可直接通过脚本启动和管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前期准备

  • 脚本复制:修改脚本中参数后拷贝脚本,将下面的脚本内容复制,在虚拟机的任意路径下执行命令vim redis_manager.sh -> 按下键盘的Inster键 ->鼠标右键粘贴或使用键盘上的shift+Insert组合快捷键粘贴->按键盘ESC键->输入:wq!
  • 因为部分依赖是通过yum安装的,所以确认机器上yum源配置正确,国内可以百度阿里云yum源配置
  • 执行以下命令安装依赖环境(注意:scl enable devtoolset-9 bash请一定要执行)。
# install the depend of make
yum -y install centos-release-scl
yum -y install gcc g++ gcc-c++ make
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
yum -y install tcl
scl enable devtoolset-9 bash
  • 执行脚本安装redis:  sh redis_manager.sh install
  • 执行脚本启动redis:  sh redis_manager.sh start

2. 脚本

#!/usr/bin/env bash
#######################################
# This shell is for manager redis
# Author: Coline
# Date: 2020/12/29 12:05
#######################################
readonly SCRIPT_PATH=$(cd `dirname $0`; pwd)
SHELL_NAME=$0
ACTION=$1
CURRENT_USER=`whoami`
hostIp=$(/sbin/ip route get 1| sed 's/^.*src \(\S*\).*$/\1/;q')

# declare where the install package
readonly INSTALL_PACKAGE_WAY=
# declare the install way
readonly INSTALL_WAY=/opt/cloud/middleware
# declare the redis owner
readonly USER=service
# declare the redis owner group
readonly USER_GROUP=servicegroup
# declare the redis log document
readonly REDIS_LOG_DIR=/opt/cloud/logs/redis
# declare the redis password
readonly REDIS_PASSWD=Cloud12#$


function usage() {
  echo "Usage: $SHELL_NAME {start|stop|restart|install|uninstall}"
  exit 2
}

function log_info() {
  echo "[$(date -d today +"%Y-%m-%d %H:%M:%S %:::z")] $1"
}

function log_error() {
  echo -e "[$(date +"%Y-%m-%d %H:%M:%S %Z%:z")] [ERROR] $* \n"
  exit 1
}

function check_result()
{
  local ret_code=$1
  shift
  local error_msg=$*
  if [[ ${ret_code} -ne 0 ]]; then
    log_error ${error_msg}
  fi
}

function normal_check() {
  # check current director whether have redis package
  if [[ ! -f ${INSTALL_PACKAGE_WAY} ]]; then
    log_error "pleas check whether install package exists"
  fi

  # check param whether empty
  if [[ -z ${INSTALL_WAY} ]] || [[ -z ${USER} ]] || [[ -z ${USER_GROUP} ]] || [[ -z ${REDIS_LOG_DIR} ]]; then
    log_error "param can not be empty"
  fi
}

# do something before install
function pre_install(){
  #create group ${USER}
  grep "^${USER_GROUP}" /etc/group &> /dev/null
  if [[ $? -ne 0 ]]; then
    log_info "add user group"
    groupadd ${USER_GROUP}
  fi

  #create user group
  id ${USER} &> /dev/null
  if [[ $? -ne 0 ]]; then
    log_info "add user"
    useradd -g ${USER_GROUP} ${USER}
    chage -M 99999 ${USER}
  fi

  # make install way
  mkdir -p ${INSTALL_WAY}/install
  # make log way
  mkdir -p ${REDIS_LOG_DIR}
  chown ${USER}:${USER_GROUP} -R ${REDIS_LOG_DIR}
}

# do install job
function install_redis(){
  # unzip the package to install way
  tar -zxvf ${INSTALL_PACKAGE_WAY} -C ${INSTALL_WAY}/install
}

function post_install() {
  cd ${INSTALL_WAY}/install
  local redis_dir=$(ls -lt ${INSTALL_WAY}/install|grep redis-|head -1|awk '{print $9}')
  cd ${INSTALL_WAY}/install/${redis_dir}
  make MALLOC=libc
  cd src
  make install PREFIX=${INSTALL_WAY}/${redis_dir}
  cd ${INSTALL_WAY}/install/${redis_dir}
  mkdir ${INSTALL_WAY}/${redis_dir}/etc
  cp -p redis.conf ${INSTALL_WAY}/${redis_dir}/etc
  # Delete temporary installation files
  rm -rf ${INSTALL_WAY}/install

  # Configure redis to start in the background
  sed -i "s/^daemonize no/daemonize yes/" ${INSTALL_WAY}/${redis_dir}/etc/redis.conf
  # Configure redis bind
  sed -i "s/^bind 127.0.0.1/bind ${hostIp}/" ${INSTALL_WAY}/${redis_dir}/etc/redis.conf
  # Configure redis log file
  sed -i "s/^logfile \"\"/logfile ${REDIS_LOG_DIR//\//\\/}\/redis.log/" ${INSTALL_WAY}/${redis_dir}/etc/redis.conf
  # Configure password
  if [[ -n ${REDIS_PASSWD} ]]; then
    sed -i "s/# requirepass foobared/requirepass ${REDIS_PASSWD}/" ${INSTALL_WAY}/${redis_dir}/etc/redis.conf
  fi

  # Copy redis-cli and redis-server to bin, so that redis-cli instructions can be directly used in any directory
  cp ${INSTALL_WAY}/${redis_dir}/bin/redis-server /usr/local/bin/
  cp ${INSTALL_WAY}/${redis_dir}/bin/redis-cli /usr/local/bin/
  # create ln of redis
  cd ${INSTALL_WAY}
  ln -s ${redis_dir} ${INSTALL_WAY}/redis

  chown ${USER}:${USER_GROUP} -R ${INSTALL_WAY}/redis
  chown ${USER}:${USER_GROUP} -R ${INSTALL_WAY}/${redis_dir}
}

# install redis
function install() {
  log_info "------------normal_check------------"
  normal_check
  check_result $? "normal_check failed."
  log_info "normal_check success"

  log_info "------------pre_install-------------"
  pre_install
  check_result $? "pre_install failed."
  log_info "pre_install success"

  log_info "------------install_redis-------------"
  install_redis
  check_result $? "install_redis failed."
  log_info "install_redis success"

  log_info "------------post_install-------------"
  post_install
  check_result $? "post_install failed."
  log_info "post_install success"
}

# uninstall redis
function uninstall() {
  local redis_pid=$(ps -ef|grep ${INSTALL_WAY}/redis|grep -vwE "grep|vi|vim|tail|cat|sh"|awk '{print $2}')
  if [[ -n ${redis_pid} ]] ;then
    log_error "please stop redis firstly"
  fi
  # delete the redis install way
  rm -rf ${INSTALL_WAY}/redis
  rm -rf ${INSTALL_WAY}/*redis*
  rm -rf /usr/local/bin/redis-server /usr/local/bin/redis-cli
  sed -i "/${INSTALL_WAY//\//\\/}\/redis\/bin\/redis-server ${INSTALL_WAY//\//\\/}\/redis\/etc\/redis.conf/d" /etc/rc.local
}

# start redis
function start() {
  local redis_pid=$(ps -ef|grep ${INSTALL_WAY}/redis|grep -vwE "grep|vi|vim|tail|cat|sh"|awk '{print $2}')
  if [[ -n ${redis_pid} ]] ;then
    log_info "redis has been start"
    return 0
  fi

  if [[ ${CURRENT_USER} = ${USER} ]]; then
    ${INSTALL_WAY}/redis/bin/redis-server ${INSTALL_WAY}/redis/etc/redis.conf &
  else
    su - ${USER} -c "${INSTALL_WAY}/redis/bin/redis-server ${INSTALL_WAY}/redis/etc/redis.conf &"
  fi
}


# stop redis
function stop() {
  local redis_pid=$(ps -ef|grep ${INSTALL_WAY}/redis|grep -vwE "grep|vi|vim|tail|cat|sh"|awk '{print $2}')
  if [[ -z ${redis_pid} ]] ;then
    log_info "redis process non-exists"
    return 0
  fi
  local redis_pid=$(ps -ef|grep ${INSTALL_WAY}/redis|grep -vwE "grep|vi|vim|tail|cat|sh"|awk '{print $2}')
  if [[ -n ${redis_pid} ]] ;then
    log_info "redis pid still exists pid= ${redis_pid}"
    pkill redis
  fi
  sleep 5
  if [[ -n ${redis_pid} ]] ;then
    log_info "redis pid still exists pid= ${redis_pid}"
    kill -9 ${redis_pid}
  fi
}

case "$ACTION" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        sleep 5
        start
    ;;
    install)
        install
    ;;
    uninstall)
        uninstall
    ;;
    *)
        usage
;;
esac

参数修改:

INSTALL_PACKAGE_WAY安装包路径,需要全路径,例如:/root/redis-6.0.9.tar.gz
INSTALL_WAYkafka安装路径,例如:/opt/cloud/middleware
USER服务用户属主,例如:root
USER_GROUP服务用户用户组,例如:root
REDIS_LOG_DIRredis日志路径,例如:/opt/cloud/logs/redis
REDIS_PASSWD

redis密码(可选,若不填写默认不设置密码)

    脚本命令:

sh redis_manager.sh install安装redis
sh redis_manager.sh uninstall卸载redis
sh redis_manager.sh start启动redis
sh redis_manager.sh stop关闭redis
sh redis_manager.sh restart重启redis
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值