zoukankan      html  css  js  c++  java
  • Linux下一个Redis启动/关闭/重新启动服务脚本

    脚本功能:

           实现redis单机多实例情况下的正常启动、关闭、重新启动单个redis实例。完毕系统标准服务的下面经常使用功能:  start|stop|status|restart

          注:redis程序代码屏蔽了HUP信号。不支持在线重载配置文件,故去掉reload功能。

                 本脚本优化了redis停止和重新启动逻辑,解决原redis脚本关闭时会造成数据丢失问题。

     

    脚本名称:

            redis           #在多实例里能够按实例port,:redis-6001命名,以区分不同实例

     

    脚本使用方法:

    1./etc/rc.d/init.d/文件夹下新建redis文件,将脚本内容拷贝进去

    2.  chkconfig --add redis   #注冊服务

    3. chkconfig --level 345 redis on  #指定服务在345级别执行

    4.本人redis程序安装在/usr/local/redis文件夹下,配置为/usr/local/redis/bin/redis.conf,如安装在其它文件夹,请自行改动

    脚本參数:

            redis -p [port]  [start|stop|status|restart]

                  參数说明:

              -p [port] : 指定redis实例的端口,用于多实例的server

             start:启动指定port的Redis服务

             stop:停止指定port的Redis服务

            status:进程状态

           restart:先关闭Redis服务,再启动Redis服务

          注:不指定port时,脚本默认指定启动6379port的redis

    使用方法实例:

        service redis -p 6381 start  #启动6381port实例的redis

       /etc/init.d/redis  start  #默认启动6379port实例的redis

    脚本内容:

    #!/bin/bash
    #chkconfig: 2345 55 25
    #description: Starts,stops and restart the redis-server
    #Ver:1.1  
    #Write by ND chengh(200808)
    #usage: ./script_name -p [port] {start|stop|status|restart}

    # Source function library.
    . /etc/rc.d/init.d/functions

    # Source networking configuration.
    . /etc/sysconfig/network

    # Check networking is up.
    [ "$NETWORKING" = "no" ] && exit 0

    RETVAL=0
    REDIS_PORT=6379
    PID=

    if [ "$1" = "-p" ]; then
        REDIS_PORT=$2
        shift 2
    fi

    REDIS_DIR="/usr/local/redis"
    REDIS="${REDIS_DIR}/bin/redis-server"
    PROG=$(basename $REDIS)

    CONF="${REDIS_DIR}/bin/redis-${REDIS_PORT}.conf"

    if [ ! -f $CONF ]; then
       if [ -f "${REDIS_DIR}/bin/redis.conf" ];then
          CONF="${REDIS_DIR}/bin/redis.conf"
       else
          echo -n $"$CONF not exist.";warning;echo
          exit 1
       fi
    fi

    PID_FILE=`grep "pidfile" ${CONF}|cut -d ' ' -f2`
    PID_FILE=${PID_FILE:=/var/run/redis.pid}
    LOCKFILE="/var/lock/subsys/redis-${REDIS_PORT}"

    if [ ! -x $REDIS ]; then
        echo -n $"$REDIS not exist.";warning;echo
        exit 0
    fi


    start() {

        echo -n $"Starting $PROG: "
        $REDIS $CONF
        RETVAL=$?


        if [ $RETVAL -eq 0 ]; then
            success;echo;touch $LOCKFILE
        else
            failure;echo
        fi
        return $RETVAL

    }

    stop() {

        echo -n $"Stopping $PROG: "

        if [ -f $PID_FILE ] ;then
           read PID <  "$PID_FILE" 
        else 
           failure;echo;
           echo -n $"$PID_FILE not found.";failure;echo
           return 1;
        fi

        if checkpid $PID; then
         kill -TERM $PID >/dev/null 2>&1
            RETVAL=$?


            if [ $RETVAL -eq 0 ] ;then
                    success;echo 
                    echo -n "Waiting for Redis to shutdown .."
             while checkpid $PID;do
                     echo -n "."
                     sleep 1;
                    done
                    success;echo;rm -f $LOCKFILE
            else 
                    failure;echo
            fi
        else
            echo -n $"Redis is dead and $PID_FILE exists.";failure;echo
            RETVAL=7
        fi    
        return $RETVAL

    }

    restart() {
        stop
        start
    }

    rhstatus() {
        status -p ${PID_FILE} $PROG
    }

    hid_status() {
        rhstatus >/dev/null 2>&1
    }

    case "$1" in
        start)
            hid_status && exit 0
            start
            ;;
        stop)
            rhstatus || exit 0
            stop
            ;;
        restart)
            restart
            ;;
        status)
            rhstatus
            RETVAL=$?


            ;;
        *)
            echo $"Usage: $0 -p [port] {start|stop|status|restart}"
            RETVAL=1
    esac

    exit $RETVAL



    转载自:http://blog.csdn.net/chhxo/article/details/8673020

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    Mybatis的缓存
    Mybatis使用assocation和Collection实现延迟加载
    Mybatis:一对多的查询
    Mysql:事务
    Mysql:多表查询
    Mysql:数据库的设计
    Mysql:约束
    MYSQL:DQL-查询表中的记录
    panic: cannot create context from nil parent
    $request input 获取参数null
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4891571.html
Copyright © 2011-2022 走看看