1. 前言
Redis是一个开源的内存数据库,具有高性能、高可靠性、支持丰富的数据结构等特点,因此广受开发者欢迎。在Linux系统中,Redis默认不会随系统启动而启动,这就需要我们手动设置Redis开机启动。
2. 设置启动脚本
在Linux环境中,启动脚本一般都位于/etc/init.d目录下。因此,我们需要先将 Redis 的启动脚本拷贝到该目录下:
sudo wget https://raw.githubusercontent.com/antirez/redis/4.0/src/redis-server -O /etc/init.d/redis-server
接着,我们修改redis-server脚本的权限,使其具有可执行权限:
sudo chmod +x /etc/init.d/redis-server
2.1 修改redis-server脚本文件
虽然我们已经将 redis-server 脚本拷贝到了 /etc/init.d 目录下,但是 Redis 并不知道该如何启动或者停止。这就需要我们修改 /etc/init.d/redis-server 文件,指定一些必要的参数。具体操作如下:
用vi或者其他编辑器打开 /etc/init.d/redis-server 文件:
sudo vi /etc/init.d/redis-server
接着,将文件中的 REDISPORT 和 REDISCONFIG 常量值更改为 Redis 实例所使用的端口号和配置文件的路径,根据实际情况进行更改。这里假设 Redis 实例端口为 6379,配置文件位于 /etc/redis/redis.conf。我们需要将下列代码中的相应变量值进行更改:
REDISPORT=6379
REDISCONFIG="/etc/redis/redis.conf"
接下来,将文件中其他的注释部分和不需要的代码删去,最终修改后的代码如下:
#!/bin/sh
### BEGIN INIT INFO
# Provides: redis-server
# Required-Start: $syslog $remote_fs
# Required-Stop: $syslog $remote_fs
# Should-Start: $local_fs
# Should-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: redis-server - Persistent key-value db
# Description: redis-server - Persistent key-value db
### END INIT INFO
#
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
REDISCONFIG="/etc/redis/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 $REDISCONFIG
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$REDIS_CLI -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
#
exit 0
3. 设置Redis服务为系统服务
如何将 Redis 服务添加到系统服务中呢?我们需要借助系统自带的 update-rc.d 命令。update-rc.d 命令类似于 chkconfig 命令,都是 服务开机自启 功能相关的命令。使用 update-rc.d 命令可以自动创建或者删除启动链接,以达到自启效果。
3.1 修改redis-server脚本文件
在修改 /etc/init.d/redis-server 文件之前,我们需要稍微调整一下脚本文件中的一些常量。具体来说,需要将其中的 PIDFILE 常量设置为正确的值:
PIDFILE=/var/run/redis_${REDISPORT}.pid
由于没有相应的目录,所以会报错,因此,我们需要新建目录:
sudo mkdir /var/run/redis
然后赋权给redis用户组:
sudo chown redis:redis /var/run/redis
3.2 设置redis-server为系统服务
设置Redis服务为系统服务:
sudo update-rc.d redis-server defaults
设置完成之后,系统会自动添加 redis-server 服务到启动项中,这样,当 Linux 系统启动时,Redis 服务也会同时启动。
4. 验证Redis开机自启是否成功
在启动 Redis 服务后,我们可以通过如下命令查看 Redis 的启动状态:
sudo service redis-server status
如果 Redis 启动正常,则会显示如下信息:
● redis-server.service - LSB: redis-server - Persistent key-value db
Loaded: loaded (/etc/init.d/redis-server; generated; vendor preset: enabled)
Active: active (running) since Mon 2019-12-23 19:09:59 CST; 33s ago
Docs: man:systemd-sysv-generator(8)
Process: 3076 ExecStart=/etc/init.d/redis-server start (code=exited, status=0/SUCCESS)
Tasks: 4 (limit: 4915)
Memory: 3.3M
CGroup: /system.slice/redis-server.service
└─3084 /usr/local/bin/redis-server *:6379
Dec 23 19:09:59 debian systemd[1]: Starting LSB:redis-server - Persistent key-value db...
Dec 23 19:09:59 debian redis-server[3076]: Starting Redis server...
Dec 23 19:09:59 debian redis-server[3076]: 3084:C 23 Dec 2019 19:09:59.942 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
Dec 23 19:09:59 debian redis-server[3076]: 3084:C 23 Dec 2019 19:09:59.942 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=3084, just started
Dec 23 19:09:59 debian redis-server[3076]: 3084:C 23 Dec 2019 19:09:59.942 # Configuration loaded
Dec 23 19:09:59 debian systemd[1]: Started LSB:redis-server - Persistent key-value db.
至此,我们已经将 Redis 服务设置为系统服务,并启用了开机自启功能。在下次 Linux 系统重启之后,Redis 服务也将自动启动。