【发布时间】:2017-02-26 23:47:40
【问题描述】:
我在 Debian 服务器 8.5 上运行 Redis 服务器 2.8.17。我使用 Redis 作为 Django 1.8.4 应用程序的会话存储。
我已经有几个月没有更改服务器上的软件配置了,直到一周前 Django 开始引发以下错误时,一切都运行良好:
MISCONF Redis is configured to save RDB snapshots but is currently not able to persist to disk. Commands that may modify the data set are disabled. Please check Redis logs for details...
我检查了 redis 日志,发现这种情况大约每秒发生一次:
1 changes in 900 seconds. Saving...
Background saving started by pid 22213
Failed opening .rdb for saving: Permission denied
Background saving error
我已经阅读了这两个 SO 问题1、2,但它们并没有帮助我找到问题所在。
ps 显示用户“redis”正在运行服务器:
redis 26769 ... /usr/bin/redis-server *.6379
我检查了我的配置文件中的 redis 文件名和路径:
grep ^dir /etc/redis/redis.conf =>
dir /var/lib/redis
grep ^dbfilename /etc =>
dbfilename dump.rdb
/var/lib/redis 的权限为 755,归 redis:redis 所有。 /var/lib/redis/dump.rdb 的权限是 644,它也归 redis:redis 所有。
我还在服务器进程上运行了 strace:
ps -C redis-server # pid = 26769
sudo strace -p 26769 -o /tmp/strace.out
但是当我检查输出时,我没有看到任何错误。特别是,我没有看到预期的“权限被拒绝”错误。
另外,/var/lib/redis 不是 NFS 目录。
有谁知道还有什么可能导致这种情况?我不想不得不停止使用 Redis。我知道我可以运行命令“set stop-writes-on-bgsave-error yes”,但这并不能解决问题。
现在每天都在发生这种情况,我可以阻止错误的唯一方法是重新启动 Redis 服务器。
谢谢。
【问题讨论】:
-
这个输出:
grep ^dir /etc/redis/redis.conf => dir /var/lib/redisredis/redis.conf准确吗? -
另外,为什么您的日志文件引用一个 PID 22213,而您的 ps 命令显示另一个?这只是时间上的怪癖,还是您在调试命令之间重新启动了 redis?
-
抱歉,这是我在问题中修正的 grep 中的错字。我相信 PID 22213 是指一个新的后台保存进程,而不是 PID 为 26769 的 Redis 服务器进程本身。
-
你已经完成
lsof /var/lib/redis/dump.rdb了吗?