02.利用Shell开发Redis多实例启动脚本

一、Redis部署情况

## 软件部署情况
[[email protected] ~]# ls -ld /data/apps/redis   <==目录本身及以下所有文件的属主/组为redis
lrwxrwxrwx 1 root root 24 Oct 26 11:33 /data/apps/redis -> /data/apps/redis-4.0.14/

## 实例部署情况
[[email protected] ~]# tree /data/redis/         <==目录本身及以下所有文件的属主/组为redis
/data/redis/
├── 6379
    ├── conf  # 6379实例的配置文件
    ├── data  # 6379实例的数据目录(不管使用不使用持久化,都给创建好)
    ├── logs  # 6379实例的日志文件
    └── run   # 6379实例pid的存放路径

二、Redis启停方式

## Redis服务用什么用户来启动
01:Redis建议使用普通用户来启动,不要用root用户来启动;
02:我一般会在操作系统下创建一个redis普通用户(要有家目录,要有密码,用户和密码不能过期)

## Redis的启停方式
启动:redis-server /data/redis/6379/conf/redis.conf
停止:redis-cli -h "可连接到redis实例的IP" -p "端口" -a "密码" shutdown >/dev/null 2>&1

三、Redis启动和停止的脚本内容

注意:该脚本只有root用户能够执行(脚本中进行限制了的),在启动redis服务时,是通过su - redis -c "redis的启动方式"来进行启动的

#!/bin/bash
#
# Define variables
RETVAL=0
User="redis"
Port=6379
Pass="chenliang"
Bind="172.16.1.31"
Exec="/data/apps/redis/src/redis-server"
Cliexec="/data/apps/redis/src/redis-cli"
Conf="/data/redis/6379/conf/redis.conf"
Pid="/data/redis/6379/run/redis.pid"

# Determine ther user to execute
if [ "$UID" -ne "$RETVAL" ];then
   echo "Must be root to run scripts"
   exit 1
fi

# Load functions
[ -f /etc/init.d/functions ] && source /etc/init.d/functions

# Define functions
start(){
    if [ ! -f $Pid ];then
       /usr/bin/su - $User -c "$Exec $Conf"
       RETVAL=$?
       if [ $RETVAL -eq 0 ];then
          action "Start redis[$Port] service" /bin/true
         else
          action "Start redis[$Port] service" /bin/false
       fi
     else
       echo "redis[$Port] service is running"
    fi
    return $RETVAL
}

stop(){
    if [ -f $Pid ];then
       $Cliexec -h $Bind -p $Port -a $Pass shutdown >/dev/null 2>&1
       RETVAL=$?
       if [ $RETVAL -eq 0 ];then
          action "Stop redis[$Port] service" /bin/true
         else
          action "Stop redis[$Port] service" /bin/false
       fi
      else
       echo "redis[$Port] is not running"
    fi
    return $RETVAL
}

status(){
    if [ -f $Pid ];then
       echo "redis[$Port] service is running"
      else
       echo "redis[$Port] service is not running"
    fi
    return $RETVAL
}

# Case call functions
case "$1" in
    start)
        start
        RETVAL=$?
        ;;
    stop)
        stop
        RETVAL=$?
        ;;
    restart)
        stop
        sleep 2
        start
        RETVAL=$?
        ;;
    status)
        status
        RETVAL=$?
        ;;
    *)
        echo "USAGE:$0{start|stop|restart|status}"
        exit 1
esac

四、脚本执行结果

# 查看redisd脚本有哪些选项
[[email protected] ~]# /data/redis/6379/redisd
USAGE:/data/redis/6379/redisd{start|stop|restart|status}

# 查看当前redis 6379实例的状态
[[email protected] ~]# /data/redis/6379/redisd status
redis[6379] service is not running

# 启动redis 6379实例并查看状态
[[email protected] ~]# /data/redis/6379/redisd start
Start redis[6379] service                                  [  OK  ]
[[email protected] ~]# lsof -i :6379
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 8000 redis    6u  IPv4  34575      0t0  TCP node31:6379 (LISTEN)

# 重启redis 6379实例并查看状态
[[email protected] ~]# /data/redis/6379/redisd restart
Stop redis[6379] service                                   [  OK  ]
Start redis[6379] service                                  [  OK  ]
[[email protected] ~]#
[[email protected] ~]# lsof -i :6379
COMMAND    PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 8042 redis    6u  IPv4  34747      0t0  TCP node31:6379 (LISTEN)

# 停止redis 6379实例
[[email protected] ~]# /data/redis/6379/redisd stop
Stop redis[6379] service                                   [  OK  ]
[[email protected] ~]# lsof -i :6379
[[email protected] ~]#

五、加入开机自启动

我一般是放在/etc/rc.local文件,并让该文件的权限为744

[[email protected] ~]# echo -ne "\n# Boot start redis service[6379]. USER:chenliang TIME:$(date +%F)\n/data/redis/6379/redisd start\n" >>/etc/rc.local
[[email protected] ~]# tail -2 /etc/rc.local
# Boot start redis service[6379]. USER:chenliang TIME:2020-02-17
/data/redis/6379/redisd start

原文地址:https://www.cnblogs.com/chenliangc/p/11746400.html

时间: 2024-10-19 00:39:09

02.利用Shell开发Redis多实例启动脚本的相关文章

通过Shell开发企业级标准服务启动脚本案例(MySQL)

老男孩教育Linux高端运维班Shell课后必会考试题: 企业Shell面试题10:开发企业级MySQL启动脚本 说明: MySQL启动命令为: /bin/sh mysqld_safe --pid-file=$mysqld_pid_file_path 2>&1 >/dev/null & 停止命令逻辑脚本为: mysqld_pid=`cat "$mysqld_pid_file_path"` if (kill -0 $mysqld_pid 2>/dev/n

Redis多实例启动脚本

1,修改redis.conf 设置redis后台启动 daemonize yes 2,编写脚本 vi /etc/init.d/redis #!/bin/sh #chkconfig: 2345 10 90 #description: Startup and stop script for Redis PATH=/usr/local/bin:/sbin:/usr/bin:/bin REDISPORT_1=6380 REDISPORT_2=6381 REDISPORT_3=6382 REDISPORT

MySQL 多实例启动脚本

企业案例:开发mysql多实例启动脚本:mysql多实例路径为: [[email protected] ~]# ls -ld /data/3306/ drwxr-xr-x 3 mysql mysql 4096 Oct 9 13:28 /data/3306/ 1)已知mysql多实例启动命令为: mysql_safe --default-file=/data/3306/my.cnf & 2)停止命令为: mysqladmin -uroot -poldboy123 -S /data/3306/mys

开发rsync服务的启动脚本

开发rsync服务的启动脚本 1.查看rsync软件包是否安装: [[email protected] scripts]# rpm -qa rsync rsync-3.0.6-9.el6_4.1.x86_64 [[email protected] scripts]# touch /etc/rsyncd.conf [[email protected] scripts]# rsync --daemon [[email protected] scripts]# netstat -lntup |grep

利用shell开发rsync服务启动脚本

利用shell函数开发rsync服务启动脚本,之前的不够专业 #!/bin/bash #chkconfig: 2345  20 80                       #这两行加入kconfig #description: Saves and restores system entropy  pool source /etc/init.d/functions    #调用标准的函数库 aa() {   echo "plz one canshu"   exit 5 } bb()

开发mysql单实例或多实例启动脚本

单实例 启动:mysqld_safe --user=mysql & 停止:mysqladmin -u root -proot shutdown 开发脚本 #!/bin/bash #chkconfig: 2345 30 50 #Date:2017-6-29 #Author:xcn([email protected]) #version Ultimates PID="/var/run/mysqld/mysqld.pid" user="root"       #定

linux shell 之尝试编写 企业级 启动脚本

企业Shell面试题10:开发企业级MySQL启动脚本 说明: MySQL启动命令为: 1 /bin/sh mysqld_safe --pid-file=$mysqld_pid_file_path 2>&1 >/dev/null & 停止命令逻辑脚本为: 1 2 3 4 5 6 mysqld_pid=`cat "$mysqld_pid_file_path"` if (kill -0 $mysqld_pid 2>/dev/null)   then    

编写mysql多实例启动脚本

脚本原理: 启动MySQL动作: mysqld_safe来执行启动 停止MySQL动作: 使用mysqladmin来执行停止动作 重启的MySQL动作:    原理就是先停止,然后再启动 但是要注意:简单的sleep来等待停止和启动过程极可能出现在短时间内重复运行重启,mysqld_safe报错提示已经启动了一个实例的问题 这里可以参考MySQL提供的默认启动脚本mysqld.service中的wait_for_pid()这个函数. 以下是启动脚本,效果如图: 脚本: 1 #!/bin/sh 2

利用Shell开发跳板机功能脚本案例

范例17_6::开发企业级Shell跳板机案例.要求用户登录到跳板机仅能执行管理员给定的选项动作,不允许以任何形式中断脚本到跳板机服务器上执行任何系统命令. 方法1: 1)首先做好SSH密钥验证(跳板机地址192.168.33.128). 以下操作命令在所有机器上操作: [[email protected] ~]# useradd jump  #<==要在所有机器上操作. [[email protected] ~]# echo 123456|passwd --stdin jump  #<==要