管理多个Redis的一个脚本

我们在一台服务器上部署了8个Redis,显然手动停止/启动多个redis不是很方便,所以写了一个shell脚本,就是为了能够同时停止/启动多个redis。使用了两个自定义函数,一个case条件,多个if条件,还有几个for循环,另外就是shift,用以处理用户传递的多个参数。

 这个脚本感觉有点臃肿,可能使用数组会好点,但是我不擅长数组;也考虑过使用自定义函数来判断用户输入的redis是否合法,或正在运行,但shell函数显然不太擅长处理用户传递的多个脚本参数。

#!/bin/bash 

#2011-10-10 by qinshan.li 

PROCESS=$(pgrep redis) 

SEP='------------------' 

PATH=/usr/local/redis-2.2.8 

 

status() { 

    if [ -z "$PROCESS" ] 

    then 

        echo "No redis is running..." 

    else 

        echo "PID  NAME  PORT" 

        echo $SEP 

        /bin/ps -ef |/bin/grep redis |/bin/grep -v grep |/bin/awk '{print $2" "$9}' |/bin/awk -F ' +|/' '{print $1" "$6}' >process.txt 

        /bin/netstat -anp |/bin/grep redis |/bin/awk -F "(:|/)" '{print $2" "$3}' |/bin/awk '{print $5" "$1}' >port.txt 

        /usr/bin/join process.txt port.txt 

        echo $SEP 

    fi 

 } 

 

start() { 

    for i in $(/bin/ls); do 

        if [ -d $PATH/$i ]; then 

            P=$(/bin/ps -ef |/bin/grep $i |/bin/grep -v grep |/bin/awk '{print $2}') 

            if [ -n "$P" ]; then 

                echo "'$i' is running. Stop it first." 

            else 

                echo -e "Starting redis '$i'..."

                /usr/bin/nohup /usr/local/bin/redis-server $PATH/$i/redis.conf >/dev/null 2>&1 & 

            fi 

        fi 

    done 

 

case $1 in 

    stop) 

        if [ $# -eq 1 ]; then 

            /bin/kill -9 $(/usr/bin/pgrep redis) 

        else 

            shift 

            for INS in "$@" 

            do   

                if [ -d $PATH/$INS ]; then 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/pxpdy.html