redis基础之开机自启动和监听(二)

redis安装好后,每次手动启动很不方便,配置开机自启动。

方法一:设置启动命令到/etc/rc.d/rc.local

  • rc.local文件是系统全局脚本文件,会在其他开机进程脚本文件执行完毕后执行该文件;

  • 直接在该文件末尾加入命令:

# start the redis-server
REDISPORT=6390
/usr/local/bin/redis-server "/etc/redis/redis_${REDISPORT}.conf"

  • 为rc.local增加可执行权限
sudo chmod +x /etc/rc.d/rc.local
  • 重新启动主机测试一下,简单粗暴。

方法二:利用redis自带的开机自启动脚本

  • 所有的Linux的启动脚本文件都在/etc/rc.d/init.d下,主机启动后会依次执行init.d下的所有的脚本文件;

  • redis自带的开机自启动脚本在utils文件夹下;

# 进入utils复制一份脚本文件到/etc/rc.d/init.d
cd utils
sudo cp redis_init_script /etc/rc.d/init.d/Sredis
# 打开Sredis修改脚本
sudo vi /etc/rc.d/init.d/Sredis
  • 根据redis.conf文件的配置修改脚本
#!/bin/sh
# chkconfig: 2345 80 90
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

REDISPORT=6390     # 对应redis.conf文件的端口
EXEC=/usr/local/bin/redis-server  # redis-server 文件的位置
CLIEXEC=/usr/local/bin/redis-cli  # redis-cli 文件的位置

PIDFILE=/var/run/redis_${REDISPORT}.pid  # 进程文件的位置
CONF="/etc/redis/redis_${REDISPORT}.conf"   # 配置文件的位置

case "$1" in
    start)
        if [ -f $PIDFILE ]  # 如果redis进程文件存在
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF  # $EXEC表示EXEC的值,命令:/usr/local/bin/redis-server "/etc/redis/redis_${REDISPORT}.conf"
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -h 192.168.1.22 -p $REDISPORT shutdown  # 该命令为  redis-cli -h ip地址 -p 端口 shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac

  • 说明:

  • #! /bin/sh : # 表示注释,但第一行#!表示指定使用哪个shell解释器运行脚本

  • # chkconfig: 2345 80 90 : 使用chkconfig来管理

  • 为脚本添加可执行权限

sudo chmod +x Sredis
  • 测试
/etc/init.d/Sredis start
# 如果能顺利启动redis则成功
  • 注册开机
# 将脚本添加到系统服务列表
chkconfig --add Sredis
# 打开自启动开关
chkconfig Sredis on

# 查看所有注册的脚本文件
chkconfig --list

  • 注意

  • 注册时可能出现找不到文件的情况,一般是因为你是在window环境下编辑shell脚本的,在linux环境下,没有这个问题,需要修改格式

sudo vi Sredis
: set ff=unix

问题

  • 设置redis开机自启动脚本后,重启一次主机,redis会把进程pid写进/var/run/redis_6390.pid中;但是redis运行中如果执行了

  • /etc/rc.d/init.d/Sredis stop 或

  • redis-cli -h ip -p port shutdown ;redis_6390.pid文件会随着redis-server退出而删除;但是再次手动启动redis-server,redis_6390.pid文件不会出现;

  • 另外如果redis运行中redis崩溃或执行了kill命令,redis_6390.pid文件不会被删除,同时不会再记录新的redis进程pid;

设置监听

方法一:设置监听脚本

  • redis一般作为缓存,运行过程如果出现崩溃或退出时不行的,需要一个脚本文件来监听redis的运行;由于/var/run/redis_6390.pid文件的不确定性,不能使用其是否存在来监控redis的运行;每一个进程在/proc下有一个进程文件,针对redis的进程文件写一个脚本Mredis.
#!/bin/sh
#chkconfig: 2345 10 90
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
 
REDISPORT=6390
EXEC=/usr/local/bin/redis-server
 
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/redis_${REDISPORT}.conf"

while [ 1 -gt 0 ]; do
    if [ -f $PIDFILE ]
    then
    echo "$PIDFILE exists"
    PID=$(cat $PIDFILE)
        if [ ! -f /proc/${PID} ]
        then
        PID1=$($EXEC $CONF | grep "pid=" | cut -d ":" -f 1)
        echo ${PID1} > $PIDFILE
        fi
    else
    echo "Starting Redis server..."
    $EXEC $CONF
    fi
    sleep 2
    done
  • 将文件放置到/etc/redis中
sudo mv Mredis /etc/redis/Mredis
  • 添加可执行权限
sudo chmod +x Mredis
  • 在rc.local中加入自启动命令
sudo vi /etc/rc.d/rc.local

REDISPORT=6379
/etc/redis/Mredis_${REDISPORT}

方法二:提交cron任务

  • linux系统有一个专门用来管理定时任务的进程cron,一般是设置成开机自启动的,可以通过以下命令查看
ps aux | grep cron
  • 关于cron任务的细节参考:cron任务介绍

  • 第一步:编辑一个crontab文件

# 进入redis的utils文件
cd /usr/local/redis/utils
touch redis_minute
vi redis_minut
SHELL=/bin/bash

# set a minute of redis.conf
*/1 * * * * /etc/redis/Mredis_6390

  • 修改Mredis_6390脚本文件
#! /bin/sh
# chkconfig: 2345 80 90
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.

REDISPORT=6390
EXEC=/usr/local/bin/redis-server

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/redis_${REDISPORT}.conf"

if [ -f $PIDFILE ]
    then
    echo "$PIDFILE exists"
    PID=$(cat $PIDFILE)
        if [ ! -x /proc/${PID} ]
        then
        PID1=$($EXEC $CONF | grep "pid=" | cut -d ":" -f 1)
        echo ${PID1} > $PIDFILE
        fi
    else
    echo "Starting Redis server..."
    $EXEC $CONF
fi

  • 第二步:提交任务
crontab redis_minute
  • 第三步:查看任务
crontab -l 
service crond restart  # 重启cron服务

生产环境下的redis的启动和监听

  • 上述的启动和监听方法在测试或练习的时候可用,但生产环境下涉及大量的进程管理,这时就不合适了,需要专门的进程管理工具,楼主使用的是supervisor.

  • supervisor的安装配置参考:http://www.cnblogs.com/cwp-bg/p/8623132.html

  • supervisor是不能管理守护进程的,因此需要设置redis的配置参数。

vi redis.conf

# 将daemonize设置为 no,在前台运行
daemonize no

  • 在supervisor配置文件中加入redis配置。
touch /etc/supervisor/super.d/redis.ini
chmod 644 /etc/supervisor/super.d/redis.ini

# 编辑
vi redis.ini

[program:redis_6390]
command=/usr/local/bin/redis-server /etc/redis/6390.conf
stdout_logfile=/var/log/redis_6390_out.log
stderr_logfile=/var/log/redis-6390_err.log

# supervisord.conf加入include上述文件
[include]
files = /etc/supervisor/super.d/redis.ini

# 重新载入
supervisorctl update
posted @ 2018-01-18 17:37  倥偬时光  阅读(3440)  评论(0编辑  收藏  举报