【Redis】centos7 systemctl 启动 Redis 失败

今天启动 Redis 时阻塞很长时间,之后显示启动失败,启动状态如下。

  1. systemd[1]: redis.service start operation timed out. Terminating.

  2. systemd[1]: Failed to start A persistent key-value database.

  3. systemd[1]: Unit redis.service entered failed state.

看了下 service 文件,发现 Systemd 启动命令如下

ExecStart=/usr/sbin/redis-server /etc/redis.conf

手动运行这条命令,发现是正常的,所以猜想是 service 文件的问题,后来发现只需要把 [Service] 部分的 Type=forking 注释掉就行了。

  1. [Service]

  2. # Type=forking

  3. # PIDFile=/var/run/redis/redis.pid

  4. ExecStart=/usr/sbin/redis-server /etc/redis.conf

  5. User=redis

  6. Group=redis

之后重新加载 Service 文件并启动 Redis 服务

sudo systemctl daemon-reload
sudo systemctl start redis

Man pages 对 Systemd 服务启动类型 Type 的解释如下

If set to forking, it is expected that the process configured with ExecStart= will call fork() as part of its start-up. The parent process is expected to exit when start-up is complete and all communication channels are set up. The child continues to run as the main daemon process. This is the behavior of traditional UNIX daemons. If this setting is used, it is recommended to also use the PIDFile= option, so that systemd can identify the main process of the daemon. systemd will proceed with starting follow-up units as soon as the parent process exits.

因为 Redis 配置文件里配置的是
daemonize no

### CentOS 7Redis 启动失败的解决方案 #### 检查配置文件路径和权限 确保使用的 `redis.conf` 文件路径正确无误。通常情况下,Redis 的配置文件位于 `/etc/redis/redis.conf` 或者自定义位置如 `/root/redis-6.2.5/etc/redis.conf`[^2]。另外,确认该配置文件具有适当的读取权限。 #### 验证守护进程运行状态 利用命令 `ps aux | grep redis-server` 来查看是否有其他实例正在占用相同端口或资源。如果有冲突,则需停止这些不必要的进程再尝试重启服务[^4]。 #### 修改绑定地址与开放防火墙端口 默认情况下,Redis 只监听本地回环接口 (127.0.0.1),这阻止了外部访问。为了允许来自网络内其他机器的请求,可以在配置文件中取消对 bind 行前缀的注释或将 IP 设置为通配符形式 (`bind 0.0.0.0`) 。同时记得调整 SELinux 和 iptables 规则来放行目标端口号(通常是6379)[^3]。 #### 日志分析排查错误原因 通过查阅日志文件了解具体报错信息有助于定位问题所在。对于 systemd 系统而言,执行 journalctl -u redis 查看最近的日志条目;而对于传统 SysV init 脚本来说则是 tail -f /var/log/messages 或者直接打开指定目录下的 .log 文件进行审查[^1]。 #### 测试环境变量影响因素 有时某些全局性的 shell 参数可能干扰程序正常工作。建议临时切换至最小化环境下测试启动情况,比如使用 clean environment 执行:env -i PATH=/bin:/sbin:/usr/bin:/usr/sbin bash 并在此基础上重新加载并激活 Redis 服务。 ```bash # 清除现有环境变量后进入新shell env -i PATH=/bin:/sbin:/usr/bin:/usr/sbin bash # 加载新的环境设置 source ~/.bashrc || source /etc/profile.d/*.sh # 尝试再次启动Redis服务 /usr/local/redis/bin/redis-server /path/to/your/redis.conf ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

姜太小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值