安装Redis报错(离开目录“/usr/local/redis/src”)

本文介绍了在安装Redis时遇到的报错问题,错误源于缺少C编译环境。解决方法包括了解安装编译环境的重要性,清空之前的安装操作,然后开始进行编译。

如果你遇到的问题是这样的

[root@localhost redis]# ls
00-RELEASENOTES  CONTRIBUTING  deps     Makefile   README.md   runtest          runtest-sentinel  src    utils
BUGS             COPYING       INSTALL  MANIFESTO  redis.conf  runtest-cluster  sentinel.conf     tests
[root@localhost redis]# make
cd src && make all
make[1]: 进入目录“/usr/local/redis/src”

Hint: It's a good idea to run 'make test' ;)

make[1]: 离开目录“/usr/local/redis/src”

👿这个问题应该很眼熟,这次必须掌握啦!!!

解决方法

报错原因是:redis 是用 C 编译的,make 当然是用来解码的啦!,所有出现上述错误,你应该想到😅没有安装编译环境(不解的同学💗可以去看我的上上篇文章三种方法安装Nginx)

1、准备安装环境
安装环境详解

[root@localhost redis]# yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

2、要清空一下原有操作哦,避免报错💦

[root@localhost redis]# make distclean

<think> 我们面对的问题是:手动启动Redis正常,但通过systemctl启动失败,并报出`ExecStart`路径的退出状态为1(FAILURE)。结合引用内容和常见原因,我们需要逐步排查。 ### 问题分析 1. **权限问题**:systemd服务通常以特定用户(如redis)运行,而手动启动可能是root用户。需要确保redis用户有访问相关目录和文件的权限。 2. **配置冲突**:Redis配置文件中`daemonize`选项应设为`no`(因为systemd本身会管理进程),而手动启动时可能没有这个限制。 3. **路径问题**:PID文件或日志文件的路径可能不存在或权限不足。 4. **服务文件配置错误**:服务文件中的路径或参数错误。 ### 解决步骤 #### 1. 检查Redis配置文件 修改`/usr/local/redis/conf/redis.conf`: ```ini # 禁用守护进程模式(由systemd管理) daemonize no # 设置pid文件路径(确保目录存在且redis用户有权限) pidfile /var/run/redis/redis.pid # 设置日志文件路径(确保目录存在且redis用户有权限) logfile "/var/log/redis/redis.log" ``` #### 2. 创建并设置目录权限 ```bash # 创建PID文件目录 sudo mkdir -p /var/run/redis sudo chown redis:redis /var/run/redis # 假设redis服务用户为redis # 创建日志目录 sudo mkdir -p /var/log/redis sudo chown redis:redis /var/log/redis ``` #### 3. 创建Redis系统用户(如果不存在) ```bash sudo groupadd -r redis sudo useradd -r -g redis -s /bin/false -d /var/lib/redis redis ``` #### 4. 修改systemd服务文件 编辑`/etc/systemd/system/redis.service`,确保内容如下: ```ini [Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis Group=redis ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf ExecStop=/bin/kill -s TERM $MAINPID WorkingDirectory=/usr/local/redis Restart=always RestartSec=30 PIDFile=/var/run/redis/redis.pid # 与配置文件中的pidfile一致 [Install] WantedBy=multi-user.target ``` #### 5. 重新加载并启动服务 ```bash # 重新加载systemd配置 sudo systemctl daemon-reload # 启动服务 sudo systemctl start redis # 检查状态 sudo systemctl status redis ``` #### 6. 查看日志定位问题 如果启动失败,使用以下命令查看详细日志: ```bash journalctl -u redis -xe --no-pager ``` ### 常见错误及解决方案 - **PID文件无法创建**:检查`/var/run/redis`目录权限,确保redis用户有写权限。 - **配置文件不存在或权限不足**:检查`/usr/local/redis/conf/redis.conf`是否存在,并确保redis用户可读。 - **地址已占用**:检查端口6379是否被占用(`sudo lsof -i :6379`)。 - **日志文件无法写入**:确保`/var/log/redis`目录存在且redis用户有写权限。 ### 原理说明 systemd服务以指定用户(redis)运行,而手动启动通常以当前用户(root)运行。因此,目录和文件的权限问题会导致systemd启动失败。同时,`daemonize no`是必须的,因为systemd本身会管理进程的守护化。 ### 相关问题 1. 如何在Redis配置中启用持久化? 2. Redis集群模式如何配置多个节点? 3. 如何调整Redis的最大内存限制? 4. 如何为Redis配置密码认证? 5. Redis出现连接超时问题如何排查? 通过以上步骤,应该能够解决systemctl启动Redis失败的问题。如果问题依旧,请根据日志具体分析。 </think> 根据您的描述和引用内容,手动启动 Redis 正常但 `systemctl` 失败,通常由以下原因导致。以下是完整的解决方案: ### 问题原因分析 1. **目录权限问题**:Redis 服务用户无权访问 `/var/run/redis` 目录(PID 文件存放位置)[^1] 2. **配置文件冲突**:`redis.conf` 中 `daemonize` 设置与 systemd 冲突(应禁用守护进程模式)[^3] 3. **PID 文件路径缺失**:systemd 服务文件和 Redis 配置中的 PID 文件路径不一致 4. **日志文件权限**:Redis 用户无法写入日志文件 ### 完整解决方案 #### 1. 修复目录权限(关键步骤) ```bash # 创建并授权PID文件目录 sudo mkdir -p /var/run/redis sudo chown redis:redis /var/run/redis sudo chmod 775 /var/run/redis # 创建并授权日志目录 sudo mkdir -p /var/log/redis sudo chown redis:redis /var/log/redis ``` #### 2. 修改 Redis 配置文件 编辑 `/usr/local/redis/conf/redis.conf`: ```ini # 必须禁用守护进程模式(systemd要求) daemonize no # 设置PID文件路径(与systemd服务一致) pidfile /var/run/redis/redis.pid # 设置日志路径 logfile "/var/log/redis/redis.log" # 确保配置文件路径正确(解决引用[3]的错误) dir /usr/local/redis/ ``` #### 3. 修正 systemd 服务文件 编辑 `/etc/systemd/system/redis.service`: ```ini [Service] # 关键配置 ↓ User=redis Group=redis ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf PIDFile=/var/run/redis/redis.pid # 必须与配置文件一致 ``` #### 4. 重载配置并测试 ```bash # 重载配置 sudo systemctl daemon-reload # 测试启动(模拟systemd环境) sudo -u redis /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf # 正式启动服务 sudo systemctl start redis ``` #### 5. 验证服务状态 ```bash sudo systemctl status redis # 预期输出应包含:Active: active (running) # 查看实时日志 journalctl -u redis -f ``` ### 错误排查表 | 错误现象 | 解决方案 | |--------------------------------------|----------| | `Can't open PID file` | 执行 `sudo chown redis:redis /var/run/redis` | | `Failed to open config file` | 检查配置文件路径和权限 `ls -l /usr/local/redis/conf/` | | `status=203/EXEC` | 确保 `ExecStart` 路径正确,执行 `ls -l /usr/local/redis/bin/redis-server` | | 端口冲突 (Address already in use) | 执行 `sudo ss -tulnp \| grep :6379` 终止冲突进程 | ### 技术原理说明 当您手动执行启动命令时,使用的是当前用户(通常为 root)权限,而 systemd 服务默认以 `User=redis` 运行。这导致: 1. Redis 用户无法访问 `/var/run` 等系统目录 2. PID 文件路径必须在两个位置一致: - `redis.conf` 中的 `pidfile` - `redis.service` 中的 `PIDFile` 3. `daemonize no` 是强制要求,因为 systemd 自身提供守护功能[^3] ### 相关问题 1. Redis 集群模式下如何配置多个 systemd 服务实例? 2. 如何为 Redis 配置 TLS 加密通信? 3. 出现 `MISCONF Redis is configured to save RDB snapshots` 错误如何解决? 4. 如何调整 Redis 的最大内存限制? 5. Redis 持久化方案(RDB vs AOF)如何选择和配置?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值