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
redis基础之开机自启动和监听(二)的更多相关文章
- 配置redis开机自启动和监听
redis安装好后,每次手动启动很不方便,配置开机自启动. 方法一:设置启动命令到/etc/rc.d/rc.local rc.local文件是系统全局脚本文件,会在其他开机进程脚本文件执行完毕后执行该 ...
- 【进阶之路】Redis基础知识两篇就满足(二)
导言 大家好,我是南橘,一名练习时常两年半的java练习生,这是我在博客园的第二篇文章,当然,都是要从别处搬运过来的,不过以后新的文章也会在博客园同步发布,希望大家能多多支持^_^ 这篇文章的出现,首 ...
- CentOS6.8下安装redis并配置开机自启动
参考资料:http://www.bubuko.com/infodetail-1006383.html http://www.cnblogs.com/skyessay/p/6433349.html ...
- Redis集群下过期key监听
1. 前言 在使用redis集群时,发现过期key始终监听不到.网上也没有现成的解决方案.于是想,既然不能监听集群,那我可以建立多个redis连接,分别对每个redis的key过期进行监听.以上做法可 ...
- 【Redis系列】Spring boot实现监听Redis key失效事件
talk is cheap, show me the code. 一.开启Redis key过期提醒 方式二:修改配置文件 redis.conf # 默认 notify-keyspace-events ...
- linux 系统下开机自动启动oracle 监听和实例 (亲测有效)
[oracle@oracle11g ~]$ dbstartORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listene ...
- js基础——事件绑定(事件监听)
JavaScript事件一共有三种监听方法分别如下: 1.事件监听一夹杂在html标签内 <div id="box" onClick="alert('HELLO W ...
- Android短信监听(二)——利用ContentObserver实现短信监听
MainActivity例如以下: package cc.testsmslistener; import cc.testsmslistener.SMSContentObserver.MessageLi ...
- Linux开机自启应用&开机执行脚本&监听端口应用挂掉了执行启动脚本
linux开机自启 背景 目前要部署一个spring boot框架的jar包,实现开机启动项目或者应用挂掉了 执行启动脚本 在root目录下有一个启动项目的脚本: app_start.sh app_s ...
随机推荐
- java 基础--switch--003
1,break可以省略吗? default中的可以省略,其他的如果省略会执行下一个case,从下一个case的 break中中断.(case穿透) 2,default一定要在最后吗? 不是,可以在任意 ...
- 如何在flink中传递参数
众所周知,flink作为流计算引擎,处理源源不断的数据是其本意,但是在处理数据的过程中,往往可能需要一些参数的传递,那么有哪些方法进行参数的传递?在什么时候使用?这里尝试进行简单的总结. 使用conf ...
- Java入门之:基本数据类型
Java基本数据类型 变量就是申请内存来存储值,也就是说,当创建变量的时候,需要在内存中申请空间.内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来存储该类型的数据,如下图所示: 因此, ...
- 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出
安装微软的windows补丁 KB2781514 ,补丁主要解决“在 .NET Framework 4.5 更新之后,Visual Studio 用户可能无法打开或创建 C++ 或 JavaScrip ...
- BZOJ1076:[SCOI2008]奖励关——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1076 https://www.luogu.org/problemnew/show/P2473 你正在 ...
- 项目管理---git----快速使用git笔记(一)------git的简单介绍
最近svn代码管理服务器崩溃了,切换到git来运作. 经过几天的使用,感觉很不错. 尤其是代码合并到正式版本之前 可以对代码进行 code review. 这样能很好的保证团队的代码质量和一些重复代码 ...
- HDU1540 区间合并
Tunnel Warfare Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- tp查找某字段,排除某字段,不用一次写那么多
更多的情况下我们都是查询某些字段,但有些情况下面我们需要通过字段排除来更方便的查询字段,例如文章详细页,我们可能只需要排除status和update_time字段,这样就不需要写一堆的字段名称了(有些 ...
- SqlDataAdapter 用法详解
SqlCommand是sql命令,执行后通过sqlDataAdapter返回填入DataSet SqlDataAdapter 有不同的构造函数, SqlDataAdapter(SqlCommand ...
- 再续前缘-apache.commons.beanutils的补充
title: 再续前缘-apache.commons.beanutils的补充 toc: true date: 2016-05-32 02:29:32 categories: 实在技巧 tags: 插 ...