You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redis停止时/var/run/redis/目录被删除,重启失败如何解决?

这问题我碰到过好几次,确实挺烦人的,给你几个实用的解决办法,按你的系统环境选就行:

解决方案一:修改systemd服务配置(推荐)

如果你的Linux发行版用systemd管理服务(比如Ubuntu 16.04+、CentOS 7+这些主流系统),这是最省心的方案:

  • 首先打开Redis的systemd服务文件,通常路径是/lib/systemd/system/redis-server.service,如果是自定义服务可能在/etc/systemd/system/redis.service
  • 在[Service]区块里添加以下两行配置:
    RuntimeDirectory=redis
    RuntimeDirectoryPreserve=yes
    
    简单解释下:RuntimeDirectory=redis会让systemd自动在/var/run下创建redis目录,还会自动设置正确的权限(匹配Redis运行用户);RuntimeDirectoryPreserve=yes会告诉systemd,停止服务时别把这个目录删掉。
  • 保存文件后,重新加载systemd的配置:sudo systemctl daemon-reload
  • 最后重启Redis服务生效:sudo systemctl restart redis-server

解决方案二:启动前自动创建目录

要是不想动systemd的核心配置,也可以给Redis加个启动前置操作,确保目录存在:

  • 还是编辑Redis的systemd服务文件,在[Service]区块里添加这两行:
    ExecStartPre=/bin/mkdir -p /var/run/redis
    ExecStartPre=/bin/chown redis:redis /var/run/redis
    
    这样每次Redis启动前,都会先检查/var/run/redis目录,不存在就创建,还会把权限改成Redis运行用户的,避免权限问题。
  • 同样执行sudo systemctl daemon-reload和sudo systemctl restart redis-server来生效

解决方案三:适配旧版SysVinit系统

如果你的系统用的是传统的init.d脚本(比如老版本的Debian、CentOS 6):

  • 找到Redis的init.d脚本,一般是/etc/init.d/redis-server
  • 找到脚本里的start函数,在启动Redis的命令之前,加上这两行:
    mkdir -p /var/run/redis
    chown redis:redis /var/run/redis
    
  • 保存脚本后,确保它有执行权限:sudo chmod +x /etc/init.d/redis-server
  • 重启服务:sudo service redis-server restart

为啥会出现这个问题?

其实核心原因是/var/run是系统的临时文件目录,默认情况下systemd或者init脚本在停止服务时,会清理服务创建的临时目录和文件。你把套接字放在/var/run/redis下,停止时目录和套接字一起被删了,下次启动Redis找不到目录就报错了。上面的方法要么让系统保留目录,要么每次启动前自动重建,就能彻底解决这个问题。

内容的提问来源于stack exchange,提问作者Mikael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:55:55