路漫漫其修远兮
吾将上下而求索

redis学习:redis自动安装脚本

文件目录

[root@localhost ~]#tree install_redis
install_redis
├── file
│   ├── redis.init
│   └── redis.logrotate
├── install.log
└── install_redis.sh

1 directory, 4 files

文件内容

[root@localhost ~/install_redis/file]#cat redis.init 
#!/bin/sh
#
# redis        init file for starting up the redis daemon
#
# chkconfig:   - 20 80
# description: Starts and stops the redis daemon.

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

name="redis-server"
exec="/usr/local/redis/bin/$name"
pidfile="/usr/local/redis/run/redis.pid"
REDIS_CONFIG="/usr/local/redis/conf/redis.conf"
lockfile="/usr/local/redis/run/lock/redis"
#以上内容需要根据实际情况修改


start() {
    [ -f $REDIS_CONFIG ] || exit 6
    [ -x $exec ] || exit 5
    echo -n $"Starting $name: "
    daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG"
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $name: "
    killproc -p $pidfile $name
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    false
}

rh_status() {
    status -p $pidfile $name
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}"
        exit 2
esac
exit $?

文件内容

[root@localhost ~/install_redis/file]#cat redis.logrotate 
/var/log/redis/*.log {
    weekly
    rotate 10
    copytruncate
    delaycompress
    compress
    notifempty
    missingok
}

文件内容

[root@localhost ~/install_redis]#cat install_redis.sh 
#!/bin/bash

redis_data_dir="/data/redis"
redis_port="6379"
DownloadFileDir="$(pwd)"
InstallLogFile="$(pwd)/install.log"

fun_failed() {
	printf "%-59s" "$1"
	echo -e "[\033[31mFAILED\033[0m]"
	exit 1
}

fun_ok() {
	printf "%-59s" "$1"
	echo -e "[\033[32m  OK  \033[0m]"
}

while [[ $# != 0 ]];do
	case $1 in
		-p) redis_port=$2
			;;
		-d) redis_data_dir=$2
			;;
		-h) 
			echo "Usage: Script that auto install redis srv"
			echo "       -p <port>      :Set port that redis to listen       [default: $redis_port]"
			echo "       -d <data dir>  :Set data dir that redis save data   [default: $redis_data_dir]"
			exit
			;;
	esac
	shift 2
	[[ $# = 1 ]] && shift 
done


echo "========================="
echo "Datadir:     $redis_data_dir"
echo "Listen port: $redis_port"

read -p "Confirm set is right [y/n]: " tmp 
[[ $tmp != "y" ]] && exit 2

echo
useradd -r redis -s /sbin/nologin &>> $InstallLogFile 
[[ $? -ne 0 && $? -ne 9 ]] && exit 3
fun_ok "useradd redis:"

ss -tnl | grep -q $redis_port
[[ $? -eq 0 ]] && fun_failed "port is listenning:"

yum -y install gcc gcc-c++ tcl jemalloc-devel &>> $InstallLogFile || fun_failed "install rpm:"
fun_ok "install rpm:"

[[ -e redis-3.0.7.tar.gz ]] && mv redis-3.0.7.tar.gz redis-3.0.7.tar.gz.bak-$(date +%M)
#wget http://download.redis.io/releases/redis-3.0.7.tar.gz -O redis-3.0.7.tar.gz &>> $InstallLogFile || fun_failed "wget redis:"
wget https://andblog.cn/files/redis-3.0.7.tar.gz -O redis-3.0.7.tar.gz &>> $InstallLogFile  || fun_failed "wget redis:"
fun_ok "wget redis:"

[[ -e redis-3.0.7 ]] && mv redis-3.0.7 redis-3.0.7.bak-$(date +%M)
tar xf redis-3.0.7.tar.gz   &>> $InstallLogFile || fun_failed "tar xf:"
fun_ok "tar xf redis:"

cd redis-3.0.7

CpuCount=$(cat /proc/cpuinfo| grep "processor"| wc -l)
make -j $CpuCount &>> $InstallLogFile || fun_failed "make redis:"
fun_ok "make redis:"

[[ -e /usr/local/redis-${redis_port} ]] && fun_failed "bin dir has exist:"
make PREFIX=/usr/local/redis-${redis_port} install &>> $InstallLogFile || fun_failed "make install:"
fun_ok "make install:"

mkdir -p /usr/local/redis-${redis_port}/conf
mkdir -p /usr/local/redis-${redis_port}/run/lock
mkdir -p /var/log/redis
mkdir -p $redis_data_dir

chown -R redis /usr/local/redis-${redis_port}/run/
chown -R redis /var/log/redis
chown -R redis $redis_data_dir

cp ./redis.conf /usr/local/redis-${redis_port}/conf
cp ./redis.conf /usr/local/redis-${redis_port}/conf/redis.conf.default

cd /usr/local/redis-${redis_port}/conf
sed -i "s#^daemonize.*#daemonize yes#g" ./redis.conf &>> $InstallLogFile
sed -i "s#^pidfile.*#pidfile /usr/local/redis-${redis_port}/run/redis.pid#g" ./redis.conf &>> $InstallLogFile
sed -i "s#^port.*#port ${redis_port}#g" ./redis.conf &>> $InstallLogFile
sed -i "s#^timeout.*#timeout 300#g" ./redis.conf &>> $InstallLogFile 
sed -i "s#^loglevel.*#loglevel notice#g" ./redis.conf &>> $InstallLogFile
sed -i "s#^logfile.*#logfile \"/var/log/redis/redis-${redis_port}.log\"#g" ./redis.conf &>> $InstallLogFile
sed -i "s#^dir.*#dir ${redis_data_dir}#g" ./redis.conf &>> $InstallLogFile
sed -i "s#^dbfilename.*#dbfilename redis-${redis_port}.rdb#g" ./redis.conf &>> $InstallLogFile

cd $redis_data_dir
[[ -e ${redis-${redis_port}.rdb} ]] && fun_failed "data file exist:"

\cp $DownloadFileDir/file/redis.init /etc/init.d/redis-${redis_port}
sed -i "s#/usr/local/redis#/usr/local/redis-${redis_port}#"  /etc/init.d/redis-${redis_port}

chmod +x /etc/init.d/redis-${redis_port}
chkconfig --add redis-${redis_port}
chkconfig redis-${redis_port} on

\cp $DownloadFileDir/file/redis.logrotate /etc/logrotate.d/redis 
fun_ok "config redis:"

service redis-${redis_port} start &>> $InstallLogFile &>> $InstallLogFile || fun_failed "start redis:"
fun_ok "start redis:"
sleep 1
/usr/local/redis-${redis_port}/bin/redis-cli -h localhost -p ${redis_port} ping | grep PONG &>> $InstallLogFile || fun_failed "get pong from redis:"
fun_ok "get pong from redis:"

cd $DownloadFileDir
rm -rf redis-3.0.7* &>> $InstallLogFile || fun_failed "rm download file:"
fun_ok "rm download file:"

echo -e "\033[32mservice redis started \033[0m"
echo

echo "Listen port: $redis_port"
echo "Bindir:      /usr/local/redis-${redis_port}"
echo "service:     /etc/init.d/redis-${redis_port}"
echo "Datadir:     $redis_data_dir/redis-${redis_port}.rdb"
echo "Logdir:      /var/log/redis/redis-${redis_port}.log"	
echo

开始安装

bash ./install_redis.sh -p 6380 -d /data/redis

因为redis有可能一台机器上面运行多个redis实例,在新安装的时候已经有实例在运行了,这里只检测端口,只要端口没有被占用就行

执行文件目录统一:/usr/local/redis-PORT

只要冲突就报错,简单粗暴,人工智能处理冲突,

这里不添加执行文件路径到环境变量里面了,以防和已有的redis环境变量冲突,全部使用service脚本启动,在脚本里面定义全路径

未经允许不得转载:江哥架构师笔记 » redis学习:redis自动安装脚本

分享到:更多 ()

评论 抢沙发

评论前必须登录!