文件目录
[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脚本启动,在脚本里面定义全路径
–
–
–
评论前必须登录!
注册