Redis服务方式启动脚本

Redis没有默认的服务脚本,方便管理的情况下需要自定义一个服务脚本,对于实例的启动好说,对于关闭Redis进程,有两种方式
1,直接杀进程,kill -9的方式,过于简单粗暴
2,基于redis-cli shutdown的方式,需要数据密码(如果脑子没问题都会启用密码认证)
网上的两个版本,对于启动redis进程来说,是比较简单的,第一种是简单粗暴通过kill进程的方式,第二种是redis-cli shutdown但是是基于无密码的方式的,都不实用,白嫖是不可能白嫖的了。
于是就简单改写了一个基于密码认证的redis-cli shutdown方式,开启了密码认证的情况下,在stop或者restart的时候,输入一个密码参数,并且验证密码的有效性,然后基于redis-cli shutdown关闭/重启实例。

这里是Redis服务的模板,
1,基于当前实例的端口号判断服务状态,而不是pid文件,因为如果通过kill方式杀掉的进程,pid文件仍然会存在于文件中。
2,在stop或者restart的时候,需要对密码参数进行验证
3,在执行redis-cli shutdown的时候,如果密码出错,也需要进行验证,这里基于错误密码验证失败后的NOAUTH Authentication required.关键字进行判断

#!/bin/sh
chkconfig: 2345 10 90
description: Start and Stop redis
port=db_port
basedir=base_dir
datadir=data_dir
conf=data_dir/redis.conf
case "$1" in
  start)
    process=netstat -ntl|grep $port | wc -l
    if [ $process -eq 0 ]
    then
        cd ${datadir}
        $basedir/bin/redis-server ./redis.conf&
        if [ $? -eq 0 ]; then
            echo "Starting Redis server sucefully"
        else
            echo "Starting Redis server fail,refer to the log information for details"
        fi
    else
        echo "Port "$port is exists, process is already running""
    fi
    ;;
  stop)
    if [ ! $2 ];then
        echo "Redis password is required"
        exit -1
    fi
    process=lsof -i:$port -t
    if [ $process ]; then
        echo "Stopping ..."
        #kill -9 $process
        #$basedir/bin/redis-cli -p $port -a $2  shutdown
        msg=$basedir/bin/redis-cli -a $2 -p $port shutdown
        result=$(echo $msg | grep "Authentication")
        if [[ "$result" = "" ]]; then
            while [ -x /proc/${process} ]
            do
                echo "Waiting for Redis to shutdown ..."
                sleep 1
            done
            echo "Redis stopped"
        else
            echo "Authentication failed,please check redis password"
            exit -1
        fi
    else
        echo "Process is not running"
    fi
    ;;
  restart)
    process=lsof -i:$port -t
    if [ $process ]; then
        "$0" stop $2
        if [ $? -eq 0 ]; then
            "$0" start
        fi
    else
        "$0" start
    fi
    ;;
  *)
    echo "Please use start or stop or restart as first argument"
    ;;
esac

安装过程中替换相关的变量

#!/bin/bash
#sh redis_install.sh /usr/local/redis_install   /usr/local/redis_instance/redis8000/  redis-5.0.4  8000 192.168.0.66

set -e
if [ $# -lt 4 ]; then
    echo "$(basename $0): Missing script argument"
    echo "$(installdir $0) [installfilename] [port] "
    exit 9
fi

PotInUse=netstat -anp |  awk '{print $4}'  | grep $4 | wc -l
if [ $PotInUse -gt 0 ];then
    echo "ERROR" $4 "Port is used by another process!"
    exit 9
fi

basedir=${1%/}
installdir=${2%/}
installfilename=${3%/}
port=$4
bind_ip=$5

cd $basedir
echo "Unzip installation package "
tar -zxvf $installfilename.tar.gz  >/dev/null 2>&1 &
sleep 1s
mkdir -p $installfilename
cd $installfilename
mkdir -p $installdir
echo "Compile installation package"
make PREFIX=$basedir install >/dev/null 2>&1 &
sleep 1s
cp $basedir/redis.conf $installdir

sed -i "s/instance_port/$port/g"  $installdir/redis.conf
sed -i "s/bind_ip/$bind_ip/g"  $installdir/redis.conf

cd $basedir

cp -f redis_6379  /etc/init.d/redis_$port
sed -i "s/db_port/$port/g" /etc/init.d/redis_$port
sed -i "s/base_dir/${basedir//\//\\/}/g" /etc/init.d/redis_$port
sed -i "s/data_dir/${installdir//\//\\/}/g" /etc/init.d/redis_$port

chmod +x /etc/init.d/redis_$port
sleep 1s
echo "Start redis service"
cd $installdir
$basedir/bin/redis-server redis.conf >/dev/null 2>&1 &
if [ $? -eq 0 ]; then
    echo "Starting Redis server sucefully"
else
    echo "Starting Redis server fail,refer to the log information for details"
fi

简单基于服务模式启动,关闭,重启redis服务,以及密码正确性验证

Redis服务方式启动脚本

Original: https://www.cnblogs.com/wy123/p/14117432.html
Author: MSSQL123
Title: Redis服务方式启动脚本

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621408/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 使用Python实现多线程、多进程、异步IO的socket通信

    主要记录使用Python实现多线程、多进程、异步IO的socket通信的代码。 多线程实现socket通信服务器端代码 import socket import threading…

    Python 2023年10月30日
    035
  • Elasticsearch7.5.0源码编译

    环境及工具 JDK12 Gradle5.6.2 GIT 源码及预处理 到github将代码clone下来,可以根据自己的需求来获取版本,例如 git checkout v7.5.0…

    Python 2023年6月16日
    091
  • vue+flask遇到的一些问题

    最近写了一个地图网站,前端从githup上拷贝一个很简单的前端模板的下来,可以帮我节约写陆游的配置和一些公用代码。不过还遗憾模板在githup上的地址找不到了。 还是先说回遇到的问…

    Python 2023年8月11日
    062
  • 2023跨年代码(烟花+背景音乐)

    文章目录 前言 效果展示 使用方法 源码学习 * HTML代码 CSS代码 ; 前言 时光荏&#x82D2…

    Python 2023年10月7日
    088
  • python定义一个dog类 类属性有名字_python 基础 12 初识类,类方法,类属性

    python 基础 12 初识类,类方法,类属性 面向过程 : 想要一个结果 写代码 实现计算结果 面向对象开发 : 有哪些角色 角色的属性和技能 两个角色之间是如何交互的 复杂的…

    Python 2023年8月22日
    071
  • Conda虚拟环境用conda和pip安装软件包的路径问题

    pip安装路径。参考博客ubunt18.04中pip安装的包和虚拟环境中pip安装的包各自在哪里 一:正式环境中 1. pip pip3 安装的包在下面路径(pip指向了pytho…

    Python 2023年8月1日
    0286
  • 记一段恋爱反思

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年11月4日
    046
  • 数据分析三剑客

    数据分析三剑客 * – numpy – pandas – matplotlib 该篇文章主要对这三大模块做个简单介绍。 numpy numpy …

    Python 2023年8月26日
    064
  • Python图像处理【1】图像与视频处理基础

    图像与视频处理基础 * – 0. 前言 – 1. 在 3D 空间中显示 RGB 图像颜色通道 – + 1.1 图像表示 + 1.2 在 3D 空…

    Python 2023年9月29日
    047
  • Django_渲染详解

    Django_render 模板语法 模板引擎是一种可以让开发者把服务端数据填充到html网页中完成渲染效果的技术。它实现了把前端代码和服务端代码分离的作用,让项目中的业务逻辑代码…

    Python 2023年11月1日
    046
  • 物理实验霍尔效应判断P/N型半导体笔记

    最近这不要物理实验期末考试了嘛,我火速抄起实验书准备复习。复习到 霍尔效应判断P/N型半导体这一部分时很惊奇地发现网上一会儿还搜不出个明了的总结,也有很多误导性的判断方法。Σ( °…

    Python 2023年6月3日
    0127
  • Conda常用命令

    目录 应用场景说明 一、创建虚拟环境 二、激活/使用/进入某个虚拟环境 三、退出当前环境 四、复制某个虚拟环境 五、删除某个环境 六、查看当前所有环境 七、查看当前虚拟环境下的所有…

    Python 2023年8月2日
    072
  • ECharts实现全国空气质量查询

    说明:此文章源于本人数据可视化的课程设计,第一次接触前后端,花费了较多的时间,也学到了很多东西,可能一些功能点实现的比较简单,但也有很大收获,希望能够帮助到别人。 因为涉及到的东西…

    Python 2023年8月14日
    036
  • python之sys模块详解

    Original: https://www.cnblogs.com/tuixiulaozhou/p/16744643.htmlAuthor: 退休的老周Title: python之…

    Python 2023年6月9日
    060
  • 解决 net core 3.x 跨域问题

    跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。 以下几种情况是造成跨域的原因: 1. 域名相同,端口不同 域…

    Python 2023年10月15日
    068
  • 解决:Python在终端通过pip安装好包以后,在Pycharm中依然无法使用的问题

    其实出现这种情况的 主要原因就是,我们在创建新的Python项目的时候编译器会自动给我们分配一个库的安装路径(项目名/venv/Lib),我们在安装Python解释器的时候也会有一…

    Python 2023年8月2日
    096
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球