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