处理:/var/redis/run/redis_6379.pid exists, process is already running or crashed

本文介绍了当遇到/var/redis/run/redis_6379.pidexists,processisalreadyrunningorcrashed错误时的两种有效解决方案:一是使用安装文件启动redis-server /etc/redis/6379.conf;二是通过shutdown-rnow进行软重启来恢复系统。

命令;service redis start

/var/redis/run/redis_6379.pid exists, process is already running or crashed

引起这类问题一般都是强制关掉电源或断电造成的,也是没等linux正常关机

科学的处理办法2种

     1:可用安装文件启动     redis-server /etc/redis/6379.conf

2:shutdown -r now 软重启让系统自动恢复下就行了

注:网上的说法不可取,不要改动任何文件,其实什么配置等变化都没有

<think> 我们之前讨论了如何设置Nacos的开机自启动,现在用户询问的是如何设置Redis的开机自启动。根据用户提供的引用内容,有两种方法:一种是使用systemd(推荐),另一种是使用init.d脚本(旧式系统)。由于现代Linux发行版大多使用systemd,我们将重点介绍这种方法,同时也会提及init.d的方法作为备选。 ### 方法一:使用systemd(推荐) #### 步骤1:创建Redis的systemd服务文件 在`/etc/systemd/system/`目录下创建`redis.service`文件: ```bash sudo vim /etc/systemd/system/redis.service ``` 将以下内容写入文件(根据实际情况调整路径和参数): ``` [Unit] Description=Redis In-Memory Data Store After=network.target [Service] User=redis # 建议使用redis用户运行,确保安全 Group=redis ExecStart=/usr/local/bin/redis-server /path/to/redis.conf # 修改为你的配置文件路径 ExecStop=/usr/local/bin/redis-cli shutdown # 或者使用更精确的停止命令 Restart=always RestartSec=3 Type=simple # 如果Redis配置为守护进程(daemonize yes),则使用forking,否则使用simple # 如果使用forking,还需要指定PIDFile,例如:PIDFile=/var/run/redis_6379.pid [Install] WantedBy=multi-user.target ``` **重要说明**: - 确保`redis.conf`中设置了`daemonize no`(因为systemd会管理守护进程)。如果必须设置为`daemonize yes`,则`Type`应改为`forking`,并设置正确的`PIDFile`(在redis.conf中配置)。 - 如果Redis设置了密码,在`ExecStop`中需要指定密码,例如:`ExecStop=/usr/local/bin/redis-cli -a yourpassword shutdown` #### 步骤2:调整权限和配置 - 创建redis用户(如果不存在): ```bash sudo useradd -r -s /sbin/nologin redis ``` - 确保配置文件和数据目录的权限: ```bash sudo chown -R redis:redis /path/to/redis/data sudo chown redis:redis /path/to/redis.conf ``` #### 步骤3:启用并启动服务 ```bash sudo systemctl daemon-reload sudo systemctl enable redis # 设置开机自启 sudo systemctl start redis # 立即启动 ``` #### 步骤4:验证服务状态 ```bash sudo systemctl status redis ``` ### 方法二:使用init.d脚本(适用于SysVinit系统) 对于不支持systemd的系统,可以使用init.d脚本。用户提供的引用中有两个示例脚本[^1][^2]。以下是一个整合的脚本模板: 1. 创建脚本文件: ```bash sudo vim /etc/init.d/redis ``` 2. 复制以下脚本(根据引用[^1][^2]调整): ```bash #!/bin/bash # chkconfig: 2345 80 90 # description: Start and Stop redis PATH=/usr/local/bin:/sbin:/usr/bin:/bin REDISPORT=6379 EXEC=/usr/local/bin/redis-server CLIEXEC=/usr/local/bin/redis-cli PIDFILE=/var/run/redis.pid CONF="/path/to/redis.conf" AUTH="yourpassword" # 如果有密码则设置,否则可以去掉相关部分 case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed." else echo "Starting Redis server..." $EXEC $CONF echo "Redis is running..." fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running." else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -a $AUTH -p $REDISPORT shutdown # 如果无密码,去掉-a $AUTH while [ -f $PIDFILE ] do echo "Waiting for Redis to shutdown..." sleep 1 done echo "Redis stopped" fi ;; restart|force-reload) ${0} stop ${0} start ;; *) echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2 exit 1 esac ``` 3. 赋予脚本执行权限并添加到开机启动: ```bash sudo chmod +x /etc/init.d/redis sudo chkconfig --add redis # 添加服务 sudo chkconfig redis on # 设置开机启动 ``` ### 注意事项 - **配置文件位置**:确保脚本中的`CONF`(配置文件路径)和`PIDFILE`(PID文件路径)与你的实际设置一致。 - **密码认证**:如果Redis设置了密码,在停止命令中需要提供密码(如`redis-cli -a yourpassword shutdown`)。 - **日志记录**:确保Redis配置了日志文件以便排查问题。 ### 常见问题解决 - **启动失败**:检查日志(通常位于Redis配置的日志文件中)和`journalctl -u redis.service`(对于systemd)。 - **权限问题**:确保Redis用户有权限访问配置文件和数据目录。 通过以上任一方法,Redis即可开机自启动。推荐使用systemd方式管理服务。 §§相关问题§§ 1. 如何为Redis配置密码认证? 2. Redis启动失败如何排查? 3. 如何将Redis数据目录迁移到新的位置? </think> ### Redis开机自启动配置方法(Linux系统) 以下是两种主流方法实现Redis开机自启,推荐使用**systemd方案**(现代Linux系统通用): --- ### 方法一:systemd服务(推荐) #### 1. 创建服务文件 ```bash sudo vim /etc/systemd/system/redis.service ``` ```ini [Unit] Description=Redis persistent key-value database After=network.target [Service] User=redis # 专用用户(需提前创建) Group=redis Type=forking # 后台守护进程模式[^2] ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf # 启动命令 ExecStop=/usr/local/bin/redis-cli shutdown # 停止命令 Restart=always # 异常退出自动重启 RestartSec=3 # 重启间隔 PIDFile=/var/run/redis_6379.pid # PID文件路径 [Install] WantedBy=multi-user.target # 多用户模式启动 ``` #### 2. 创建专用用户和权限设置 ```bash sudo adduser --system --group --no-create-home redis sudo chown -R redis:redis /var/lib/redis # 数据目录授权 ``` #### 3. 修改Redis配置 编辑`redis.conf`: ```conf daemonize yes # 必须设为守护进程模式 pidfile /var/run/redis_6379.pid # 与service文件保持一致 dir /var/lib/redis # 数据存储目录 ``` #### 4. 启用服务 ```bash sudo systemctl daemon-reload sudo systemctl enable redis # 开机自启 sudo systemctl start redis # 立即启动 ``` #### 5. 验证状态 ```bash sudo systemctl status redis redis-cli ping # 应返回 PONG ``` --- ### 方法二:init.d脚本(SysVinit系统) #### 1. 创建启动脚本 ```bash sudo vim /etc/init.d/redis ``` ```bash #!/bin/sh # chkconfig: 2345 80 90 # description: Redis service REDISPORT=6379 REDISPATH=/usr/local/bin EXEC=$REDISPATH/redis-server CLIEXEC=$REDISPATH/redis-cli PIDFILE=/var/run/redis_$REDISPORT.pid CONF="/etc/redis/redis.conf" case "$1" in start) if [ -f $PIDFILE ]; then echo "$PIDFILE exists, process already running" else echo "Starting Redis..." $EXEC $CONF fi ;; stop) if [ ! -f $PIDFILE ]; then echo "$PIDFILE missing, process not running" else PID=$(cat $PIDFILE) echo "Stopping Redis (PID:$PID)..." $CLIEXEC -p $REDISPORT shutdown while [ -f $PIDFILE ]; do sleep 1; done fi ;; restart) $0 stop $0 start ;; *) echo "Usage: $0 {start|stop|restart}" >&2 exit 1 esac ``` #### 2. 设置权限并启用 ```bash sudo chmod +x /etc/init.d/redis sudo chkconfig --add redis # 添加到服务列表 sudo chkconfig redis on # 启用开机启动 sudo service redis start # 立即启动 ``` --- ### 关键注意事项 1. **路径匹配**:所有脚本中的路径需与实际安装路径一致 2. **PID文件**:确保`redis.conf`中的`pidfile`配置与脚本一致 3. **权限问题**: ```bash sudo chown redis:redis /etc/redis/redis.conf sudo chmod 640 /etc/redis/redis.conf ``` 4. **端口冲突**:检查端口是否被占用 `netstat -tunlp | grep 6379` 5. **日志查看**:默认日志路径 `/var/log/redis/redis-server.log` --- ### 开机自启验证方法 ```bash # 重启服务器 sudo reboot # 重启后检查 ps aux | grep redis-server systemctl status redis # systemd方式 service redis status # init.d方式 ```
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

luozhonghua2000

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

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

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

打赏作者

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

抵扣说明:

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

余额充值