• 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服务,以及密码正确性验证

  • 相关阅读:
    使用Python将excel文件中的数据提取到txt中
    多项式加法的链表实现
    hdu 5976 Detachment 逆元的应用
    JavaScript 全局函数
    JavaScript 事件句柄
    JavaScript 运算符
    纯Javascript 实现的日历 ,在IE所有版本浏览器上测试通过,火狐、谷歌、360、QQ等浏览器均兼容,理论上均兼容所有浏览器
    HTML ASCII 代码
    JavaScript 浏览器版本判定
    Delphi WebBrowser内核版本修改
  • 原文地址:https://www.cnblogs.com/wy123/p/14117432.html
Copyright © 2020-2023  润新知