#!/bin/bash
#********************************************************************
# Author: wangxiaochun
# QQ: 29308620
# Date: 2020-02-22
# FileName: install_redis_for_centos.sh
# URL: http://www.magedu.com
# Description: The test script
# Copyright (C): 2020 All rights reserved
#********************************************************************
# 导入系统函数库
. /etc/init.d/functions
# 定义变量
VERSION=redis-4.0.14
PASSWORD=123456
INSTALL_DIR=/apps/redis
# 安装函数
install() {
# 安装编译 Redis 所需的软件包
yum -y install gcc jemalloc-devel || { action "安装软件包失败,请检查网络配置" false ; exit; }
# 下载并解压 Redis 源码
wget http://download.redis.io/releases/${VERSION}.tar.gz || { action "Redis 源码下载失败" false ; exit; }
tar xf ${VERSION}.tar.gz
cd ${VERSION}
# 编译安装 Redis
make -j 4 PREFIX=${INSTALL_DIR} install && action "Redis 编译安装完成" || { action "Redis 编译安装失败" false ;exit ; }
# 创建符号链接
ln -s ${INSTALL_DIR}/bin/redis-* /usr/bin/
# 创建目录和配置文件
mkdir -p ${INSTALL_DIR}/{etc,logs,data,run}
cp redis.conf ${INSTALL_DIR}/etc/
sed -i.bak -e 's/bind 127.0.0.1/bind 0.0.0.0/' -e "/# requirepass/a requirepass $PASSWORD" ${INSTALL_DIR}/etc/redis.conf
# 创建 Redis 用户
if id redis &> /dev/null ;then
action "Redis 用户已存在" false
else
useradd -r -s /sbin/nologin redis
action "Redis 用户创建成功"
fi
# 修改权限
chown -R redis.redis ${INSTALL_DIR}
# 配置系统参数
cat >> /etc/sysctl.conf <<EOF
net.core.somaxconn = 1024
vm.overcommit_memory = 1
EOF
# 配置 systemd 服务
cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
[Service]
ExecStart=${INSTALL_DIR}/bin/redis-server ${INSTALL_DIR}/etc/redis.conf --supervised systemd
ExecStop=/bin/kill -s QUIT \$MAINPID
Type=notify
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
EOF
# 重新加载 systemd 配置
systemctl daemon-reload
# 启动 Redis 服务
systemctl start redis &> /dev/null && action "Redis 服务启动成功,Redis信息如下:" || { action "Redis 启动失败" false ;exit; }
redis-cli -a $PASSWORD INFO Server 2> /dev/null
}
# 执行安装函数
install
下面是对脚本的逐行描述:
#!/bin/bash
#********************************************************************
# Author: wangxiaochun
# QQ: 29308620
# Date: 2020-02-22
# FileName: install_redis_for_centos.sh
# URL: http://www.magedu.com
# Description: The test script
# Copyright (C): 2020 All rights reserved
#********************************************************************
# 导入系统函数库
. /etc/init.d/functions
- 第一行
#!/bin/bash
指定了脚本使用的解释器为 bash。 - 注释部分提供了脚本的作者、日期、文件名、URL 和描述等基本信息。
. /etc/init.d/functions
导入了系统函数库,以便后续使用系统函数。
# 定义变量
VERSION=redis-4.0.14
PASSWORD=123456
INSTALL_DIR=/apps/redis
定义了三个变量:VERSION
、PASSWORD
和 INSTALL_DIR
,分别用于指定 Redis 版本、密码和安装目录。
# 安装函数
install() {
# 安装编译 Redis 所需的软件包
yum -y install gcc jemalloc-devel || { action "安装软件包失败,请检查网络配置" false ; exit; }
- 定义了一个名为
install
的安装函数。 - 使用
yum
安装了编译 Redis 所需的软件包,如 gcc 和 jemalloc-devel。如果安装失败,则执行action
函数并退出脚本。
# 下载并解压 Redis 源码
wget http://download.redis.io/releases/${VERSION}.tar.gz || { action "Redis 源码下载失败" false ; exit; }
tar xf ${VERSION}.tar.gz
cd ${VERSION}
使用 wget
下载了指定版本的 Redis 源码,并解压缩到当前目录。
# 编译安装 Redis
make -j 4 PREFIX=${INSTALL_DIR} install && action "Redis 编译安装完成" || { action "Redis 编译安装失败" false ;exit ; }
使用 make
编译安装 Redis,指定了安装路径。如果编译安装成功,则执行 action
函数显示成功信息,否则显示失败信息。
# 创建符号链接
ln -s ${INSTALL_DIR}/bin/redis-* /usr/bin/
创建了 Redis 的符号链接,方便执行 Redis 相关命令。
# 创建目录和配置文件
mkdir -p ${INSTALL_DIR}/{etc,logs,data,run}
cp redis.conf ${INSTALL_DIR}/etc/
sed -i.bak -e 's/bind 127.0.0.1/bind 0.0.0.0/' -e "/# requirepass/a requirepass $PASSWORD" ${INSTALL_DIR}/etc/redis.conf
创建了 Redis 所需的目录和配置文件,并修改了配置文件,设置绑定 IP 和密码。
# 创建 Redis 用户
if id redis &> /dev/null ;then
action "Redis 用户已存在" false
else
useradd -r -s /sbin/nologin redis
action "Redis 用户创建成功"
fi
判断是否存在 Redis 用户,如果不存在则创建,并通过 action
函数显示结果。
# 修改权限
chown -R redis.redis ${INSTALL_DIR}
修改安装目录的所有者为 redis。
# 配置系统参数
cat >> /etc/sysctl.conf <<EOF
net.core.somaxconn = 1024
vm.overcommit_memory = 1
EOF
配置系统参数,包括最大连接数和内存分配策略。
# 配置 systemd 服务
cat > /usr/lib/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
...
EOF
配置 systemd 服务,定义了 Redis 的启动、停止和用户等信息。
# 启动 Redis 服务
systemctl start redis &> /dev/null && action "Redis 服务启动成功,Redis信息如下:" || { action "Redis 启动失败" false ;exit; }
redis-cli -a $PASSWORD INFO Server 2> /dev/null
启动 Redis 服务,并通过 action
函数显示启动结果,同时使用 redis-cli
获取 Redis 信息。
}
# 执行安装函数
install
执行 install
函数,开始安装 Redis。