配置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文件是系统全局脚本文件,会在其他开机进程脚本文件执行完毕后执行该 ...
- Centos7下配置Redis开机自启动
最近在做作业的时候需要用到Redis缓存,由于每次重启服务器都需要重新启动Redis,也是忒烦人,于是就有了这一篇博客,好,废话不多说. 只有两个步骤: 设置redis.conf中daemonize为 ...
- 如何在centos下配置redis开机自启动
2014/11/10补充:其实在redis的下载包中就包含了官方自带的启动脚本,路径在/redis-stable/utils/redis_init_script.在utils目录下也有安装redis- ...
- Linux CentOS7.2下安装Redis && 配置Redis开机自启动
1.安装redis 第一步:下载redis安装包 wget http://download.redis.io/releases/redis-4.0.11.tar.gz 第二步:解压压缩包 tar -z ...
- 【Redis】redis开机自启动、设置守护进程、密码设置、访问权限控制等安全设置(redis默认端口6379)
一.redis设置开机自启动:centOS: 1.修改redis.conf中daemonize为yes,确保守护进程开启,也就是在后台可以运行. (守护进程:孤儿进程:独立于终端而存在的进程,不会因为 ...
- Ubuntu16设置Redis开机自启动
Ubuntu16设置Redis开机自启动 Ubuntu16设置Redis开机自启动 设置条件: -Ubuntu16.04 -Redis-4.0.11 在redis目录下找到 utils/redi ...
- Centos7系统下编写systemd脚本设置redis开机自启动
今天想设置redis开机自启动,我觉得这样子比较好,但是在网上找了很长时间发现大家都是基于chkconfig的写法来设置的,并不能由systemd进程来统一管理,所以这里我自己编写了一个,希望大家可以 ...
- linux下配置tomcat开机自启动
Linux下配置tomcat开机自启动 1.写一个tomcat脚本,内容如下,设置其权限为755,放在/etc/init.d/目录下 #!/bin/bash## /etc/init.d/tomca ...
- [MAC]配置Jenkins 开机自启动
如果是将jenkins.war放在tomcat中运行的, 则可以配置开机启动tomcat,脚本如下: XXX表示是你安装Tomcat所在目录 #启动tomcat cd XXX/Tomcat8/bin ...
随机推荐
- spring boot +mysql + mybatis + druid的整理(一)——单数据源
一,使用spring boot脚手架搭建spring boot框架生成maven项目 如下图所示: 设置自定义的坐标,即左侧的Group和Artifact,右侧可以搜索添加一些依赖,搜索不到的可以在p ...
- flask-信号
flask中的十个内置信号:request_started = _signals.signal('request-started') # 请求到来前执行 request_finished = _sig ...
- [51nod1502]苹果曼和纸
苹果曼有很大的一张纸.这张纸的形状是1×n的长方形.你的任务是帮助苹果曼来折叠这一张纸.有一些操作,这些操作有如下两个种形式: 1. 把这张纸在第pi个位置对折.经过对折后,左边的1×pi部分会盖到右 ...
- hdu_1030(数学题+找规律)
规律就是两个数字的level差+left差+right差 代码: #include<cstdio> #include<iostream> #include<cstring ...
- [最直白版]一步一步教你用VMware Workstation12安装Ubuntu 16.04和VMware Tools的教程
[最直白版]Win10下一步一步教你用 VMware Workstation12安装Ubuntu 16.04和VMware Tools的教程 安装过程中使用的软件(要保证电脑里面有下列三个东西): 1 ...
- 久未更 ~ 二之 —— TextView 文字省略
> > > > > 久未更 系列一:关于TextView内容超过n行文尾省略问题 //在 TextView 中 实现 超过n行省略 为.. 可用以下属性 实现 andro ...
- Java多线程编程—锁优化
并发环境下进行编程时,需要使用锁机制来同步多线程间的操作,保证共享资源的互斥访问.加锁会带来性能上的损坏,似乎是众所周知的事情.然而,加锁本身不会带来多少的性能消耗,性能主要是在线程的获取锁的过程.如 ...
- destoon 默认广告位代码
<img src="http://www.testinstrument.cn/skin/default/jiurong/img/banner.png" alt="& ...
- ngRx 官方示例分析 - 3. reducers
上一篇:ngRx 官方示例分析 - 2. Action 管理 这里我们讨论 reducer. 如果你注意的话,会看到在不同的 Action 定义文件中,导出的 Action 类型名称都是 Action ...
- Flexible Box布局基础知识详解
1.基本概念,借用阮一峰老师的一张图: 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis).主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫 ...