1、 设置redis.conf中daemonize为yes,确保守护进程开启。
2、 编写开机自启动脚本
基本原理为:
系统开机启动时会去加载/etc/init.d/下面的脚本,通常而言每个脚本文件会自定义实现程序的启动;若想将新的程序开机自启动,只需在该目录下添加一个自定义启动程序的脚本,然后设置相应规则即可。
如在这里我们在/etc/init.d/下新建一个 redis 的脚本,开机启动时会去加载执行该脚本。
[root@VM-16-6-centos ~]# find / -name redis.conf
/www/server/redis/redis.conf
#设置redis.conf中daemonize为yes,确保守护进程开启。
[root@VM-16-6-centos ~]# vim /www/server/redis/redis.conf
#查找redis_init_script文件,在redis安装目录下/utils/redis_init_script
[root@VM-16-6-centos /]# find / -name redis_init_script
/www/server/redis/utils/redis_init_script
#复制启动脚本到/etc/init.d
[root@VM-16-6-centos /]# cp /www/server/redis/utils/redis_init_script /etc/init.d/redis
#修改 /etc/init.d/redis
[root@VM-16-6-centos /]# vim /etc/init.d/redis
脚本内容如下:
#!/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=6379 #端口号,这是默认的,如果你安装的时候不是默认端口号,则需要修改
REDISPATH=/usr/local/bin/ #redis-server启动脚本的所在目录,你如果忘了可以用find / -name redis-server 或whereis redis-server找到
EXEC=${REDISPATH}/redis-server
CLIEXEC=${REDISPATH}/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid #在redis.conf中可找到该路径
CONF="${REDISPATH}/redis.conf" #redis.conf的位置, 如果不和redis-server在同一目录要修改成你的redis.conf所在目录
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT 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
# chkconfig: 2345 56 26
# description: Redis Service
### BEGIN INIT INFO
# Provides: Redis
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts Redis
# Description: starts the BT-Web
### END INIT INFO
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
#pkill -9 redis-server
ulimit -n 10240
CONF="/www/server/redis/redis.conf"
REDIS_PORT=$(cat $CONF |grep port|grep -v '#'|awk '{print $2}')
REDIS_PASS=$(cat $CONF |grep requirepass|grep -v '#'|awk '{print $2}')
REDIS_HOST=$(cat $CONF |grep bind|grep -v '#'|awk '{print $2}')
if [ "$REDIS_PASS" != "" ];then
REDIS_PASS=" -a $REDIS_PASS"
fi
if [ -f "/www/server/redis/start.pl" ];then
STAR_PORT=$(cat /www/server/redis/start.pl)
else
STAR_PORT="6379"
fi
EXEC=/www/server/redis/src/redis-server
CLIEXEC="/www/server/redis/src/redis-cli -h ${REDIS_HOST} -p ${STAR_PORT}${REDIS_PASS}"
PIDFILE=/www/server/redis/redis.pid
redis_start(){
if [ -f "/www/server/redis/redis.pid" ]; then
ps -p $(cat ${PIDFILE}) > /dev/null 2>&1
if [ $? -ne "0" ]; then
rm -f ${PIDFILE}
else
echo "redis is running! ($(cat ${PIDFILE}))"
exit 0
fi
fi
echo "Starting redis server..."
sudo -u redis $EXEC $CONF
echo ${REDIS_PORT} > /www/server/redis/start.pl
echo "Starting redis success!"
}
redis_status(){
if [ -f "/www/server/redis/redis.pid" ]; then
ps -p $(cat ${PIDFILE}) > /dev/null 2>&1
if [ $? -ne "0" ]; then
echo "Redis is not running, buy pid file is exits ${PIDFILE}"
exit 1
else
echo "redis is running! ($(cat ${PIDFILE}))"
exit 0
fi
else
echo "redis is stopped"
exit 0
fi
}
redis_stop(){
echo "Stopping ..."
$CLIEXEC shutdown
sleep 1
if [ -f "/www/server/redis/redis.pid" ];then
kill -9 $(cat /www/server/redis/redis.pid)
fi
rm -f ${PIDFILE}
echo "Redis stopped"
}
case "$1" in
start)
redis_start
;;
stop)
redis_stop
;;
status)
redis_status
;;
restart|reload)
redis_stop
sleep 0.3
redis_start
;;
*)
echo "Please use start or stop as first argument"
;;
esac
设置可执行权限:
chmod 777 /etc/init.d/redis
启动redis:
/etc/init.d/redis start
执行结束之后用redis-cli 或者 ps aux|grep redis 查看redis是否成功启动.
设置开机启动:
chkconfig redis on
关机重启测试:
reboot
如何查看redis服务正常启动?
使用ps查看或netstat
ps aux | grep redis-server
netstat -tunple | grep 6379
systemctl管理Redis启动、停止、开机启动
- 创建服务
用service来管理服务的时候,是在/etc/init.d/目录中创建一个脚本文件,来管理服务的启动和停止;
在systemctl中,也类似,文件目录有所不同,在/lib/systemd/system目录下创建一个脚本文件redis.service,里面的内容如下:
[Unit]
Description=Redis
After=network.target
[Service]
ExecStart=/usr/local/bin/redis-server /usr/local/redis/redis.conf --daemonize no
ExecStop=/usr/local/bin/redis-cli -h 127.0.0.1 -p 6379 shutdown
[Install]
WantedBy=multi-user.target
[Unit] 表示这是基础信息
Description 是描述
After 是在那个服务后面启动,一般是网络服务启动后启动
[Service] 表示这里是服务信息
ExecStart 是启动服务的命令
ExecStop 是停止服务的指令
[Install] 表示这是是安装相关信息
WantedBy 是以哪种方式启动:multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
- 创建软链接
创建软链接是为了下一步系统初始化时自动启动服务
ln -s /lib/systemd/system/redis.service /etc/systemd/system/multi-user.target.wants/redis.service
创建软链接就好比Windows下的快捷方式
ln -s 是创建软链接
ln -s 原文件 目标文件(快捷方式的决定地址)
如果创建软连接的时候出现异常,不要担心,看看/etc/systemd/system/multi-user.target.wants/ 目录是否正常创建软链接为准,有时候报错只是提示一下,其实成功了。
$ ll /etc/systemd/system/multi-user.target.wants/
total 8
drwxr-xr-x 2 root root 4096 Mar 30 15:46 ./
drwxr-xr-x 13 root root 4096 Mar 13 14:18 ../
lrwxrwxrwx 1 root root 31 Nov 23 14:43 redis.service -> /lib/systemd/system/redis.service
- 刷新配置
刚刚配置的服务需要让systemctl能识别,就必须刷新配置
systemctl daemon-reload
如果没有权限可以使用sudo
$ sudo systemctl daemon-reload
4. 启动、重启、停止
启动redis
$ systemctl start redis
重启redis
$ systemctl restart redis
停止redis
$ systemctl stop redis
- 开机自启动
redis服务加入开机启动
$ systemctl enable redis
禁止开机启动
$ systemctl disable redis - 查看状态
查看状态
$ systemctl status redis