Redis 服务启动失败
这是Redis启动失败的常见原因。特别是在Ubuntu系统中,默认配置 文件可能绑定了IPv6地址(::1),而系统禁用了IPv6,导致启动失败。对此,AI 给出的回答是修改一下 redis 的配置文件,但经过查看,发现配置文件中已经存在 AI 说要添加的内容了。经过实验,发现尽管创建了目录,但一旦启动 redis 服务,该目录就会被删除,仍旧不存在。从日志来看,Redis 启动时遇到了 RDB
总结:
本人 redis 启动失败,别看各种错误显示的五花八门,其实就是两点:
-
绑定了 IPV6 的本地回环地址,但系统不允许。
-
有 RDB 文件损坏了,一运行就会读取,读取失败就启动失败了。
一、查看服务运行状态
一些常用的指令:
启动服务
重启服务
停止服务
查看是否在 6379 端口上运行着
查看 redis 服务
查看服务运行状态
sudo service redis-server start
sudo systemctl restart redis-server
sudo systemctl stop redis-server
sudo netstat -naptu| grep 6379
ps aux | grep redis
sudo systemctl status redis
二、问题:Failed to start Advanced key-value store.
ubuntu@VM-16-9-ubuntu:~/pro/pro3.Chat$ sudo systemctl status redis
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2026-03-28 18:01:29 CST; 14s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 297948 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Main PID: 297952 (code=exited, status=1/FAILURE)
Mar 28 18:01:29 VM-16-9-ubuntu systemd[1]: redis-server.service: Scheduled restart job, restart counter is at 5.
Mar 28 18:01:29 VM-16-9-ubuntu systemd[1]: Stopped Advanced key-value store.
Mar 28 18:01:29 VM-16-9-ubuntu systemd[1]: redis-server.service: Start request repeated too quickly.
Mar 28 18:01:29 VM-16-9-ubuntu systemd[1]: redis-server.service: Failed with result 'exit-code'.
Mar 28 18:01:29 VM-16-9-ubuntu systemd[1]: Failed to start Advanced key-value store.
Redis 的详细错误信息通常记录在日志文件中。查看日志:
sudo journalctl -u redis-server --no-pager -n 50 # 最近 50 条日志
结果:
ubuntu@VM-16-9-ubuntu:~/pro/pro3.Chat$ sudo journalctl -u redis-server --no-pager -n 50 # 最近 50 条日志,是查看 systemd 管理的 Redis 服务的日志
-- Logs begin at Thu 2024-10-17 10:11:01 CST, end at Sat 2026-03-28 18:03:04 CST. --
Mar 16 10:42:26 VM-16-9-ubuntu systemd[1]: redis-server.service: Scheduled restart job, restart counter is at 4.
Mar 16 10:42:26 VM-16-9-ubuntu systemd[1]: Stopped Advanced key-value store.
Mar 16 10:42:26 VM-16-9-ubuntu systemd[1]: Starting Advanced key-value store...
Mar 16 10:42:26 VM-16-9-ubuntu systemd[1]: redis-server.service: Can't open PID file /run/redis/redis-server.pid (yet?) after start: Operation not permitted
Mar 16 10:42:26 VM-16-9-ubuntu systemd[1]: Started Advanced key-value store.
Mar 16 10:42:26 VM-16-9-ubuntu systemd[1]: redis-server.service: Main process exited, code=exited, status=1/FAILURE
Mar 16 10:42:26 VM-16-9-ubuntu systemd[1]: redis-server.service: Failed with result 'exit-code'.
Mar 16 10:42:27 VM-16-9-ubuntu systemd[1]: redis-server.service: Scheduled restart job, restart counter is at 5.
Mar 16 10:42:27 VM-16-9-ubuntu systemd[1]: Stopped Advanced key-value store.
Mar 16 10:42:27 VM-16-9-ubuntu systemd[1]: redis-server.service: Start request repeated too quickly.
Mar 16 10:42:27 VM-16-9-ubuntu systemd[1]: redis-server.service: Failed with result 'exit-code'.
Mar 16 10:42:27 VM-16-9-ubuntu systemd[1]: Failed to start Advanced key-value store.
这表明 Redis 进程没有权限创建或写入 PID 文件(/run/redis/redis-server.pid),导致服务崩溃。
- /run/ 是 Linux 的临时文件系统(tmpfs),重启后内容会清空。
- Redis 默认会将 PID 文件(记录进程 ID 的文件)和 Unix Socket 文件(如果启用)存放在 /run/redis/ 下。
- 如果该目录不存在或权限不足,Redis 会报错(如你看到的 Operation not permitted)。
可能的原因:
1. /run/redis/ 目录不存在或权限不足:
某些 Linux 发行版可能不会在安装 Redis 时自动创建 /run/redis/。
可能因手动操作或脚本错误导致目录所有者/权限被更改。
- Redis 默认以 redis 用户运行,但 /run/redis/ 目录可能未创建,或所属用户/组不是 redis。
- /run/ 是临时文件系统(tmpfs),重启后目录会被清空,需确保每次启动时目录存在且权限正确。
--system:创建系统用户(无登录权限)。--group:同时创建同名组。--no-create-home:不创建家目录(Redis 不需要)。 |
2. Systemd 服务文件配置问题
Redis 的 systemd 服务文件(/lib/systemd/system/redis-server.service)可能未正确指定 PIDFile 路径,或未设置 RuntimeDirectory 创建目录。
3. SELinux/AppArmor 限制(较少见)
安全模块可能阻止 Redis 写入目录(但较少见)。
如果系统启用了 SELinux 或 AppArmor,可能阻止 Redis 写入 /run/redis/。
解决:
1. (非问题)可能的是:/run/redis/ 目录不存在
检查发现 /run/redis 目录并不存在,AI 建议手动创建该目录,同时更改权限。

经过实验,发现尽管创建了目录,但一旦启动 redis 服务,该目录就会被删除,仍旧不存在。
这样新建后,重启后目录会被清空,那每次重启后都要手动新建目录吗?对此,AI 给出的回答是修改一下 redis 的配置文件,但经过查看,发现配置文件中已经存在 AI 说要添加的内容了。
所以推测应该不是要创建目录的问题,而是其他地方出了问题。
2. (问题)bind 0.0.0.0 ::1
修改配置文件:/etc/redis/redis.conf
bind 0.0.0.0 ::1 //修改前
bind 0.0.0.0 //修改后
修改该后运行服务:
ubuntu@VM-16-9-ubuntu:~/zzz$ sudo systemctl status redis-server
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: activating (start) since Sat 2026-03-28 19:12:42 CST; 12s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 318188 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 3969)
Memory: 332.0K
CGroup: /system.slice/redis-server.service
Mar 28 19:12:42 VM-16-9-ubuntu systemd[1]: Starting Advanced key-value store...
Mar 28 19:12:42 VM-16-9-ubuntu systemd[1]: redis-server.service: New main PID 318190 does not exist or is a zombie.
bind 0.0.0.0 ::1 的实际行为:
- 0.0.0.0(IPv4 通配符地址):
1. 表示 Redis 会监听 所有 IPv4 网络接口,包括:
本地回环接口(127.0.0.1)。
机器的所有物理或虚拟网卡(如 192.168.1.100、10.0.0.1 等)。
2. 允许来自任何 IPv4 地址的连接(包括本机和外部机器)。
- ::1(IPv6 本地回环地址):
1. 表示 Redis 会监听 IPv6 的本地回环接口(::1,相当于 IPv4 的 127.0.0.1)。
2. 仅允许来自本机的 IPv6 连接(如 redis-cli -h ::1)。
|
比如:bind ::1
|
修改后 Redis 能正常启动可能的原因:
绑定地址错误(IPv6问题) 或 保护模式开启。这是Redis启动失败的常见原因。特别是在Ubuntu系统中,默认配置 文件可能绑定了IPv6地址(::1),而系统禁用了IPv6,导致启动失败。
- 系统 IPv6 支持问题
如果系统未正确配置 IPv6,或 Redis 编译时未启用 IPv6 支持,bind ::1 可能导致 Redis 启动失败(报错 Cannot assign requested address)。
去掉 ::1 后,Redis 仅尝试绑定 IPv4,避免了 IPv6 相关的问题。
- 端口冲突或权限问题
如果 IPv6 的 ::1:6379 已被其他进程占用,或 Redis 用户无权限绑定 IPv6 地址,也会导致启动失败。
三、问题:New main PID 318190 does not exist or is a zombie.
出现下面的状态:
ubuntu@VM-16-9-ubuntu:~/zzz$ sudo systemctl status redis-server
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: activating (start) since Sat 2026-03-28 19:12:42 CST; 12s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 318188 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 3969)
Memory: 332.0K
CGroup: /system.slice/redis-server.service
Mar 28 19:12:42 VM-16-9-ubuntu systemd[1]: Starting Advanced key-value store...
Mar 28 19:12:42 VM-16-9-ubuntu systemd[1]: redis-server.service: New main PID 318190 does not exist or is a zombie.
查看日志:
ubuntu@VM-16-9-ubuntu:~/zzz$ sudo journalctl -u redis-server --no-pager -n 50 # 最近 50 条日志
-- Logs begin at Thu 2024-10-17 10:11:01 CST, end at Sat 2026-03-28 20:07:39 CST. --
Mar 28 19:12:42 VM-16-9-ubuntu systemd[1]: Started Advanced key-value store.
Mar 28 19:12:42 VM-16-9-ubuntu systemd[1]: redis-server.service: Main process exited, code=exited, status=1/FAILURE
Mar 28 19:12:42 VM-16-9-ubuntu systemd[1]: redis-server.service: Failed with result 'exit-code'.
Mar 28 19:12:42 VM-16-9-ubuntu systemd[1]: redis-server.service: Scheduled restart job, restart counter is at 3.
Mar 28 19:12:42 VM-16-9-ubuntu systemd[1]: Stopped Advanced key-value store.
Mar 28 19:12:42 VM-16-9-ubuntu systemd[1]: Starting Advanced key-value store...
Mar 28 19:12:42 VM-16-9-ubuntu systemd[1]: redis-server.service: New main PID 318190 does not exist or is a zombie.
Mar 28 19:14:12 VM-16-9-ubuntu systemd[1]: redis-server.service: start operation timed out. Terminating.
Mar 28 19:14:12 VM-16-9-ubuntu systemd[1]: redis-server.service: Failed with result 'timeout'.
Mar 28 19:14:13 VM-16-9-ubuntu systemd[1]: Failed to start Advanced key-value store.
停止 Redis 服务并清理残留:
sudo systemctl stop redis-server
sudo pkill -f redis-server
sudo rm -f /run/redis/redis-server.pid
sudo systemctl start redis-server //重新启动 Redis
四、问题:Can't open PID file /run/redis/redis-server.pid (yet?) after start: Operation not permitted
发现仍然有问题:
ubuntu@VM-16-9-ubuntu:~/zzz$ sudo systemctl status redis-server
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: activating (start) since Sat 2026-03-28 20:17:05 CST; 9s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 334412 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 3969)
Memory: 368.0K
CGroup: /system.slice/redis-server.service
Mar 28 20:17:05 VM-16-9-ubuntu systemd[1]: Starting Advanced key-value store...
Mar 28 20:17:05 VM-16-9-ubuntu systemd[1]: redis-server.service: Can't open PID file /run/redis/redis-server.pid (yet?) after start: Operation not permitted
在 /etc/systemd/system/redis.service 文件的 [Service]下新增一行:
ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid"
重启:
sudo systemctl daemon-reload //重新加载配置文件
sudo systemctl enable redis-server
sudo systemctl restart redis-service
五、问题:Failed with result 'protocol'.
ubuntu@VM-16-9-ubuntu:~/zzz$ sudo systemctl start redis-server
Job for redis-server.service failed because the service did not take the steps required by its unit configuration.
See "systemctl status redis-server.service" and "journalctl -xe" for details.

使用下面的指令来查看日志:
ubuntu@VM-16-9-ubuntu:~/zzz$ sudo cat /var/log/redis/redis-server.log | tail -n 50 #查看 Redis 的本地日志文件
371291:C 28 Mar 2026 22:22:34.264 # Configuration loaded
_._
_.-``__ ''-._
_.-`` `. `_. ''-._ Redis 5.0.7 (00000000/0) 64 bit
.-`` .-```. ```\/ _.,_ ''-._
( ' , .-` | `, ) Running in standalone mode
|`-._`-...-` __...-.``-._|'` _.-'| Port: 6379
| `-._ `._ / _.-' | PID: 371292
`-._ `-._ `-./ _.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' | http://redis.io
`-._ `-._`-.__.-'_.-' _.-'
|`-._`-._ `-.__.-' _.-'_.-'|
| `-._`-._ _.-'_.-' |
`-._ `-._`-.__.-'_.-' _.-'
`-._ `-.__.-' _.-'
`-._ _.-'
`-.__.-'
371292:M 28 Mar 2026 22:22:34.267 # Server initialized
371292:M 28 Mar 2026 22:22:34.267 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
371292:M 28 Mar 2026 22:22:34.267 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
371292:M 28 Mar 2026 22:22:34.267 # Short read or OOM loading DB. Unrecoverable error, aborting now.
371292:M 28 Mar 2026 22:22:34.267 # Internal error in RDB reading function at rdb.c:2125 -> Unexpected EOF reading RDB file
371302:C 28 Mar 2026 22:22:34.514 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
371302:C 28 Mar 2026 22:22:34.514 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=371302, just started
371302:C 28 Mar 2026 22:22:34.514 # Configuration loaded
- Short read or OOM loading DB. Unrecoverable error, aborting now.
Redis 在加载 RDB 持久化文件时遇到 意外结束(EOF),说明 dump.rdb 文件可能已损坏。
- Internal error in RDB reading function at rdb.c:2125 -> Unexpected EOF reading RDB file
进一步确认 RDB 文件损坏,Redis 无法继续启动。
从日志来看,Redis 启动时遇到了 RDB 文件损坏的问题,导致服务崩溃。
解决方案
修复 RDB 文件损坏问题
方法 1:删除损坏的 RDB 文件(推荐)
- 备份并删除损坏的 RDB 文件:
sudo mv /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb.bak
Redis 会生成一个新的空 RDB 文件,服务应能正常启动。
方法 2:尝试修复 RDB 文件(如果数据重要)
- 使用 redis-check-rdb 工具(如果 Redis 版本支持):
sudo redis-check-rdb /var/lib/redis/dump.rdb
- 如果工具不可用,可以尝试从备份恢复 RDB 文件。
-------------------------------------------------------------------------------------------------------------------------------
删除或修复后,进行重启:
sudo systemctl daemon-reload
sudo systemctl start redis-server
六、日志
上面用到了两个日志:
sudo cat /var/log/redis/redis-server.log | tail -n 50 #查看 Redis 的本地日志文件
sudo journalctl -u redis-server --no-pager -n 50 #查看 systemd 管理的 Redis 服务的日志
可以两个同时查看,方便定位问题。
更多推荐

所有评论(0)