redis启动失败、systemctl显示inactive、redis-cli连不上,主因是服务名不匹配、配置错误(如protected-mode拦截)、权限/路径未对齐或日志未查。应先用systemctl list-unit-files和journalctl定位真实报错,再检查bind、requirepass、user、workingdirectory等配置项是否合规。

redis-server 启动失败、systemctl status redis-server 显示 inactive、redis-cli 连不上 —— 大概率不是安装没成功,而是配置或服务注册没对。包管理器装的 Redis 在 CentOS/RHEL 8+ 上默认是 5.x 版本,缺 TLS/ACL,不建议直接用于生产;源码编译 + systemd 托管才是可控、可升级、可审计的正解。
用 apt/dnf/yum 装完却 start 不了?先查服务名和日志
Ubuntu/Debian 的服务名是 redis-server,CentOS/RHEL 是 redis,混用会导致 systemctl start 报 “unit not found”。别猜,直接看:
-
systemctl list-unit-files | grep redis确认实际服务名 -
sudo journalctl -u redis-server -n 50 --no-pager(或对应服务名)看真实报错,常见是Permission denied或Failed to open configuration file - 包管理器安装后配置文件路径固定:
/etc/redis/redis.conf(Ubuntu)或/etc/redis.conf(RHEL/CentOS),但 systemd 单元文件可能没读这个路径
daemonize yes 没用?protected-mode 是真凶
改了 daemonize yes 却发现进程秒退,ps aux | grep redis 找不到 —— 这是 protected-mode 在拦截。Redis 3.2+ 默认开启该模式,只要没显式配置 bind 或 requirepass,它就会静默拒绝启动。
- 必须同时满足至少一项:
bind 127.0.0.1(仅本地)、requirepass yourpwd(设密码)、protected-mode no(仅测试环境) - 别写
bind 0.0.0.0,应明确列出内网 IP,例如bind 192.168.1.100 127.0.0.1 - 改完配置必须重载:先
sudo systemctl daemon-reload,再sudo systemctl restart redis-server
源码编译后 redis-server 找不到?检查 PREFIX 和 PATH
make install 默认把二进制丢进 /usr/local/bin,但某些最小化系统(如 Alpine、CentOS minimal)的 $PATH 不含该目录,导致 which redis-server 返回空。
- 先确认是否真装上了:
ls /usr/local/bin/redis-*,没输出说明make install没生效(常见于没进src/目录就执行) - 正确做法:进
src/目录再sudo make install;或指定路径安装:sudo make install PREFIX=/opt/redis,然后手动加/opt/redis/bin到 PATH - 不想改 PATH?直接用绝对路径启动:
/usr/local/bin/redis-server /etc/redis.conf
systemd 启动失败?权限和路径必须对齐
自建 /etc/systemd/system/redis-server.service 后 systemctl start 报 failed to start process: permission denied,基本是三处没配对:
-
User=必须匹配数据目录属主,比如User=redis就得有sudo chown -R redis:redis /var/lib/redis -
WorkingDirectory=要指向配置文件所在目录(如/etc/redis),否则redis-server可能找不到redis.conf -
ExecStart=中的路径必须是绝对路径,且二进制存在,例如/usr/local/bin/redis-server /etc/redis/redis.conf
firewalld 和 SELinux 比 redis.conf 更容易被忽略——先 sudo firewall-cmd --list-ports | grep 6379,再 sudo setsebool -P redis_connect_any on(如果启用了 SELinux)。











