下面是详细讲解 "CentOS下redis自启动shell脚本" 的完整攻略:
1. 编写redis自启动脚本
在 CentOS 系统下,使用 systemd 来管理系统服务。因此,我们可以编写一个 systemd 的 service 脚本来实现 redis 的自启动。
编辑服务脚本:
sudo nano /etc/systemd/system/redis.service
填入下面的内容:
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target
在这个脚本中,我们定义了一个名为 "redis" 的 service。其中:
Description
:服务的描述信息;After
:指定在哪些服务之后启动,在这里我们指定了 network.target,即系统自带的网络服务后启动;User
/Group
:指定运行该服务的用户和用户组,为了安全起见,我们要创建一个新的用户和用户组,并将其授权给 /usr/local/redis 目录,这样该用户才能成功启动 redis-server;ExecStart
:指定服务启动时要执行的命令,即启动 redis-server;ExecStop
:指定停止服务时执行的命令,即执行 redis-cli shutdown,这样能够优雅地关闭 redis 服务;Restart
:服务意外停止时,自动重启服务;WantedBy
:指定运行级别,在这里指定为 "multi-user.target",意味着在系统启动时运行该服务。
保存文件并退出。
2. 启动服务
为了让新创建的 systemd service 生效,我们需要使用以下命令重新加载 systemd 系统:
sudo systemctl daemon-reload
启动 redis 服务:
sudo systemctl start redis.service
检查服务状态:
sudo systemctl status redis.service
输出应如下:
● redis.service - Redis In-Memory Data Store
Loaded: loaded (/etc/systemd/system/redis.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2021-06-26 17:37:02 UTC; 9s ago
Main PID: 12345 (redis-server)
Tasks: 4 (limit: 2357)
Memory: 4.6M
CGroup: /system.slice/redis.service
├─12345 /usr/local/bin/redis-server *:6379
├─12347 /usr/local/bin/redis-server *:6379
├─12348 /usr/local/bin/redis-server *:6379
└─12349 /usr/local/bin/redis-server *:6379
我们可以看到 redis 服务已经启动并运行。
3. 设置自启动
为了使 redis 服务在系统启动时自动启动,我们使用以下命令:
sudo systemctl enable redis.service
现在,当我们重启系统时,redis 服务会自动启动。
示例1:运行多个redis实例
如果需要在同一台服务器上运行多个 redis 实例,需要修改服务脚本中的一些设定。
以下是一个简单的示例:
编写配置文件
首先,我们需要复制一份默认的 Redis 配置文件 /etc/redis/redis.conf:
sudo cp /etc/redis/redis.conf /etc/redis/redis_6381.conf
sudo cp /etc/redis/redis.conf /etc/redis/redis_6382.conf
接着,我们需要修改这两份配置文件。在第一份配置文件中搜索"6379"并全部替换为"6381",在第二份配置文件中搜索"6379"并全部替换为"6382"。
新建自启动服务脚本
sudo nano /etc/systemd/system/redis_6381.service
编辑服务脚本:
[Unit]
Description=Redis 6381
After=network.target
[Service]
PIDFile=/var/run/redis_6381.pid
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis_6381.conf
ExecStop=/usr/local/bin/redis-cli -p 6381 shutdown
Restart=always
[Install]
WantedBy=multi-user.target
其中:
Description
:服务的描述信息;After
:指定在哪些服务之后启动,在这里我们指定了 network.target,即系统自带的网络服务后启动;PIDFile
:指定 Redis 进程 ID 文件路径,虽然不是必须的,但是我们为了管理方便,指定该参数可以帮助我们监控 Redis 实例的启动和停止;User
/Group
:指定运行该服务的用户和用户组;ExecStart
:指定服务启动时要执行的命令,即启动 redis-server;ExecStop
:指定停止服务时执行的命令,即执行 redis-cli shutdown;Restart
:服务意外停止时,自动重启服务;WantedBy
:指定运行级别,在这里指定为 "multi-user.target"。
保存文件并退出。
同理,可以创建 redis_6382.service。
启动服务及设置自启动
sudo systemctl daemon-reload
sudo systemctl start redis_6381.service
sudo systemctl start redis_6382.service
sudo systemctl status redis_6381.service
sudo systemctl status redis_6382.service
sudo systemctl enable redis_6381.service
sudo systemctl enable redis_6382.service
示例2:设置redis的持久化
Redis 默认情况下不会持久化任何数据。如果重启服务器,Redis 将丢失所有数据,这可能是不能接受的。以下是如何设置 Redis 持久化的示例。
在 /etc/redis/redis.conf 文件中找到以下两行:
save 900 1
save 300 10
将前缀 "save" 更改为 "snapshot":
#save 900 1
#save 300 10
snapshot 900 1
snapshot 300 10
在同一文件中搜索 "appendonly no" 并将其更改为 "appendonly yes":
# appendonly no
appendonly yes
在同一文件中搜索 "dir" 并确认其值为 /var/lib/redis:
dir /var/lib/redis
保存文件并退出。
结论
经过以上步骤,Redis 服务将会在每次系统启动时自动启动,并在 Redis 容器意外停止时自动重新启动。附带的两个示例可以轻松地启动多个 Redis 实例和设置 Redis 持久化。 在访问 Redis 时,请注意防火墙规则。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CentOS下redis自启动shell脚本 - Python技术站