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