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服務,以及密碼正確性驗證

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM