redis离线安装脚本

devtools/2024/12/22 10:00:53/

redis离线安装脚本

    • 说明
    • 脚本使用
    • 完整脚本
    • 脚本内容说明
      • 1、参数校验
      • 2、文件及文件夹检查
      • 3、检查是否有同名服务
      • 4、解压、编译安装
      • 5、修改配置文件
      • 6、配置服务及开机自启动

说明

经常装服务器环境,根据以前的安装经验写了个安装脚本。本人不是专业运维,也是边百度边写的,发现问题还请指正,交流。

服务器架构 x86
系统 CentOS Linux release 8.2.2004 (Core)
redis版本 6.2.14

安装环境会影响脚本执行。例如redis的编译需要gcc,缺少得先装上。

脚本及安装包下载:https://download.csdn.net/download/weixin_44957529/90145789

脚本使用

传参格式:sh redis_insatll.sh 安装包 安装路径 端口 ‘密码’ 服务名
密码请使用单引号括住,避免特殊字符影响

sh redis_install.sh redis-6.2.14.tar.gz /usr/local/redis 6379 'sdyyhb1qaz?' redis

会根据参数自动创建安装路径,配置端口、密码,创建系统服务,并设置开机自启。

完整脚本

#!/bin/bash
#安装包路径
installationPackage=$1
#安装路径
installPath=$2
#脚本用法提示
echo "传参格式:sh $0 安装包 安装路径 端口 '密码' 服务名"
echo "示例:sh $0 redis-6.2.14.tar.gz /usr/local/redis 6379 'sdyyhb1qaz?' redis"
echo "密码请使用单引号括住,避免特殊字符影响"
#判断参数
if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ] || [ -z "$5" ]; thenecho -e "\e[31m 缺少参数,请核对 \e[0m"echo "传参格式:sh $0 安装包 安装路径 端口 密码 服务名"echo "示例:sh $0 redis-6.2.14.tar.gz /usr/local/redis 6379 sdyyhb1qaz? redis"exit 0
fi
#相对路径修改为绝对路径
if [[ $1 == /* ]]; thenecho -e "\e[32m 安装包为绝对路径 \e[0m"
elseecho -e "\e[33m 安装包为相对路径,转为绝对路径 \e[0m"installationPackage="$(pwd)/$1"echo "绝对路径为:$installationPackage"
fi
if [[ $2 == /* ]]; thenecho -e "\e[32m 安装路径为绝对路径 \e[0m"
elseecho -e "\e[33m 安装路径为相对路径,转为绝对路径 \e[0m"installPath="$(pwd)/$2"echo "绝对路径为:$installPath"
fi
# 判断安装包文件是否存在
if [ -f $installationPackage ]; thenecho "安装包文件:$installationPackage"
elseecho -e "\e[31m 安装包不存在,退出安装程序 \e[0m"exit 0
fi
# 判断文件夹是否存在
if [ -d "$installPath" ]; then# 判断文件夹是否为空if [ ! "$(ls -A $installPath)" ]; thenecho -e "\e[32m 安装目录可用 \e[0m"elseecho -e "\e[31m 安装目录不为空,退出安装程序 \e[0m"exit 0fi
elseecho "创建安装目录 $installPath"mkdir -p "$installPath"
fi
# 检查是否有同名服务
if [ -e /etc/systemd/system/"$5".service ]; thenecho -e "\e[31m 存在同名服务,无法创建服务 \e[0m"echo "退出安装程序"exit 0
fi
#截取解压目录
redis_install_temp=${installationPackage//.tar/}
redis_install_temp=${redis_install_temp//.gz/}
echo $redis_install_temp
#解压
echo "解压安装包$1"
tar -zxf "$1"
cd "$redis_install_temp"
echo "$redis_install_temp"
make && make install PREFIX="$installPath"
#复制配置文件
echo "复制配置文件"
cp "$redis_install_temp/redis.conf" "$installPath"
rm -rf "$redis_install_temp" 
cd "$installPath"
#修改配置文件
sed -i 's/^bind/#bind/g' redis.conf
sed -i 's/^protected-mode yes/protected-mode no/g' redis.conf
sed -i 's/^daemonize no/daemonize yes/g' redis.conf
sed -i 's/^port 6379/port '"$3"'/g' redis.conf
sed -i 's/^\# requirepass foobared/requirepass '"$4"'/g' redis.conf#配置服务,开机自启动
echo "[Unit]" >> /etc/systemd/system/"$5".service
echo "Description=$5-server" >> /etc/systemd/system/"$5".service
echo "After=network.target" >> /etc/systemd/system/"$5".service
echo "[Service]" >> /etc/systemd/system/"$5".service
echo "Type=forking" >> /etc/systemd/system/"$5".service
echo "ExecStart=$installPath/bin/redis-server $installPath/redis.conf" >> /etc/systemd/system/"$5".service
echo "PrivateTmp=true" >> /etc/systemd/system/"$5".service
echo "[Install]" >> /etc/systemd/system/"$5".service
echo "WantedBy=multi-user.target" >> /etc/systemd/system/"$5".service
systemctl daemon-reload
systemctl enable "$5"
systemctl start "$5"
systemctl status "$5"
echo -e "\e[32m redis安装完成,已启动,已配置开机自启 \e[0m"
echo -e "\e[32m 访问端口为:$3 \e[0m"
echo -e "\e[32m 密码为:$4 \e[0m"
echo -e "\e[32m 启动命令:systemctl start $5.service \e[0m"
echo -e "\e[32m 停止命令:systemctl stop $5.service \e[0m"
echo -e "\e[32m 重启命令:systemctl restart $5.service \e[0m"
# 检查-e "\e[32m  firewalld 服务的状态
if systemctl status firewalld > /dev/null 2>&1; thenecho -e "\e[33m 防火墙正在运行,开放端口:$3 \e[0m"firewall-cmd --zone=public --add-port="$3"/tcp --permanentfirewall-cmd --reload
elseecho -e "\e[33m 防火墙未运行 \e[0m"
fi
#配置redis-cli软连接,方便全局调用
echo "配置redis-cli软连接,方便全局调用"
ln -s "$installPath"/bin/redis-cli /usr/bin/redis-cli

脚本内容说明

1、参数校验

脚本使用提示,校验参数,参数必须写全才能继续执行

#脚本用法提示
echo "传参格式:sh $0 安装包 安装路径 端口 '密码' 服务名"
echo "示例:sh $0 redis-6.2.14.tar.gz /usr/local/redis 6379 'sdyyhb1qaz?' redis"
echo "密码请使用单引号括住,避免特殊字符影响"
#判断参数
if [ -z "$1" ] || [ -z "$2" ] || [ -z "$3" ] || [ -z "$4" ] || [ -z "$5" ]; thenecho -e "\e[31m 缺少参数,请核对 \e[0m"echo "传参格式:sh $0 安装包 安装路径 端口 密码 服务名"echo "示例:sh $0 redis-6.2.14.tar.gz /usr/local/redis 6379 sdyyhb1qaz? redis"exit 0
fi

2、文件及文件夹检查

将相对路径转换为绝对路径,方便后续使用。
检查安装包是否存在,不存在提示并退出安装
检查安装路径是否存在,不存在创建;存在且不为空,提示并退出安装。

#相对路径修改为绝对路径
if [[ $1 == /* ]]; thenecho -e "\e[32m 安装包为绝对路径 \e[0m"
elseecho -e "\e[33m 安装包为相对路径,转为绝对路径 \e[0m"installationPackage="$(pwd)/$1"echo "绝对路径为:$installationPackage"
fi
if [[ $2 == /* ]]; thenecho -e "\e[32m 安装路径为绝对路径 \e[0m"
elseecho -e "\e[33m 安装路径为相对路径,转为绝对路径 \e[0m"installPath="$(pwd)/$2"echo "绝对路径为:$installPath"
fi
# 判断安装包文件是否存在
if [ -f $installationPackage ]; thenecho "安装包文件:$installationPackage"
elseecho -e "\e[31m 安装包不存在,退出安装程序 \e[0m"exit 0
fi
# 判断文件夹是否存在
if [ -d "$installPath" ]; then# 判断文件夹是否为空if [ ! "$(ls -A $installPath)" ]; thenecho -e "\e[32m 安装目录可用 \e[0m"elseecho -e "\e[31m 安装目录不为空,退出安装程序 \e[0m"exit 0fi
elseecho "创建安装目录 $installPath"mkdir -p "$installPath"
fi

3、检查是否有同名服务

有同名服务,提示并退出安装

# 检查是否有同名服务
if [ -e /etc/systemd/system/"$5".service ]; thenecho -e "\e[31m 存在同名服务,无法创建服务 \e[0m"echo "退出安装程序"exit 0
fi

4、解压、编译安装

将安装包解压,编译、安装并指定安装目录

#截取解压目录
redis_install_temp=${installationPackage//.tar/}
redis_install_temp=${redis_install_temp//.gz/}
echo $redis_install_temp
#解压
echo "解压安装包$1"
tar -zxf "$1"
cd "$redis_install_temp"
echo "$redis_install_temp"
make && make install PREFIX="$installPath"

5、修改配置文件

根据参数修改配置文件,并开启远程访问

#复制配置文件
echo "复制配置文件"
cp "$redis_install_temp/redis.conf" "$installPath"
rm -rf "$redis_install_temp" 
cd "$installPath"
#修改配置文件
sed -i 's/^bind/#bind/g' redis.conf
sed -i 's/^protected-mode yes/protected-mode no/g' redis.conf
sed -i 's/^daemonize no/daemonize yes/g' redis.conf
sed -i 's/^port 6379/port '"$3"'/g' redis.conf
sed -i 's/^\# requirepass foobared/requirepass '"$4"'/g' redis.conf

6、配置服务及开机自启动

配置服务及开机自启动,输出:启、停、查看状态等命令。
如果使用的firewalld防火墙,判断防火墙是否启动,并开启对应端口
redis-cli添加到环境变量,方便全局调用

#配置服务,开机自启动
echo "[Unit]" >> /etc/systemd/system/"$5".service
echo "Description=$5-server" >> /etc/systemd/system/"$5".service
echo "After=network.target" >> /etc/systemd/system/"$5".service
echo "[Service]" >> /etc/systemd/system/"$5".service
echo "Type=forking" >> /etc/systemd/system/"$5".service
echo "ExecStart=$installPath/bin/redis-server $installPath/redis.conf" >> /etc/systemd/system/"$5".service
echo "PrivateTmp=true" >> /etc/systemd/system/"$5".service
echo "[Install]" >> /etc/systemd/system/"$5".service
echo "WantedBy=multi-user.target" >> /etc/systemd/system/"$5".service
systemctl daemon-reload
systemctl enable "$5"
systemctl start "$5"
systemctl status "$5"
echo -e "\e[32m redis安装完成,已启动,已配置开机自启 \e[0m"
echo -e "\e[32m 访问端口为:$3 \e[0m"
echo -e "\e[32m 密码为:$4 \e[0m"
echo -e "\e[32m 启动命令:systemctl start $5.service \e[0m"
echo -e "\e[32m 停止命令:systemctl stop $5.service \e[0m"
echo -e "\e[32m 重启命令:systemctl restart $5.service \e[0m"
# 检查-e "\e[32m  firewalld 服务的状态
if systemctl status firewalld > /dev/null 2>&1; thenecho -e "\e[33m 防火墙正在运行,开放端口:$3 \e[0m"firewall-cmd --zone=public --add-port="$3"/tcp --permanentfirewall-cmd --reload
elseecho -e "\e[33m 防火墙未运行 \e[0m"
fi
#配置redis-cli软连接,方便全局调用
echo "配置redis-cli软连接,方便全局调用"
ln -s "$installPath"/bin/redis-cli /usr/bin/redis-cli

http://www.ppmy.cn/devtools/144335.html

相关文章

MariaDB 设置 sql_mode=Oracle 和 Oracle 对比验证

功能Oracle语法MariaDB语法Oracle执行结果MariaDB执行结果创建存储过程未使用参数和变量CREATE PROCEDURE p1 ASBEGINNULL;END p1;/ DELIMITER // CREATE PROCEDURE p1()ISBEGINNULL;END // DELIMITER ; 带有参数和变量CREATE PROCEDURE p1(p_input IN NUMBER, p_output OUT NU…

架构演进之路

架构演进 前言1. 单机架构2. 应用数据分离架构3. 应用服务集群架构4. 读写分离 / 主从分离5. 冷热分离架构6. 业务拆分 —— 微服务7. 总结 前言 架构之所以会进行演变,是因为硬件的限制导致没办法容纳更多的请求 解决方法一般有:开源、节流 开源&#…

大数据相关标准——GB/T 42130-2022 智能制造 工业大数据系统功能要求(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 大数据相关标准…

前端通过new Blob下载文档流(下载zip或excel)

当后端返回这样的预览: 前端该如何下载呢?首先在axios请求里,加入第三个参数{ responseType: ‘blob’ }。 proxy.$post(url, params, { responseType: blob }).then((res)>{downloadFormat(res) });然后在一个函数里处理返回&#xff0c…

Java项目--仿RabbitMQ的消息队列--虚拟主机设计

目录 一、引言 二、VirtualHost类 1.准备工作 2.交换机操作 3.队列操作 4.绑定操作 三、完善Router类 四、测试Router类 五、完善VirtualHost类 六、完善ConsumerManager类 七、总结 一、引言 本篇文章我们就消息队列中的虚拟主机进行设计,将内存和硬盘上…

云手机有哪些用途?云手机选择推荐

云手机的使用范围日益扩大,无论是个人使用,还是各种规模的中小型工作室需要进行养号、挂机、参加活动甚至完成各种测试需求,都已经开始大量采用云手机。以前,许多公司或工作室都自行建设手机批量控制的设备,但需要自行…

嵌入式硬件面试题

1、请问什么是通孔、盲孔和埋孔?孔径多大可以做机械孔,孔径多小必须做激光孔?请问激光微型孔可以直接打在元件焊盘上吗,为什么? 通孔是贯穿整个PCB的过孔,盲孔是从PCB表层连接到内层的过孔,埋孔…

Spring Boot 集成 MyBatis 全面讲解

Spring Boot 集成 MyBatis 全面讲解 MyBatis 是一款优秀的持久层框架,与 Spring Boot 集成后可以大大简化开发流程。本文将全面讲解如何在 Spring Boot 中集成 MyBatis,包括环境配置、基础操作、高级功能和最佳实践。 一、MyBatis 简介 1. SqlSession …