django - Redis 告诉我 "Failed opening .rdb for saving: Permission denied"

标签 django redis

我在 Debian 服务器 8.5 上运行 Redis 服务器 2.8.17。我将 Redis 用作 Django 1.8.4 应用程序的 session 存储。

我已经几个月没有更改服务器上的软件配置了,一切正常,直到一周前 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 服务器。

谢谢。

最佳答案

我刚刚遇到了类似的问题。尽管我的配置文件是正确的,但当我在 redis-client 中检查实际的 dbfilename 和 dir 时,它们是不正确的。

运行 redis-cli 然后

CONFIG GET dbfilename应该返回类似的东西

1) "dbfilename"
2) "dump.rdb"

1) 只是键,2) 是值。类似地,然后运行 ​​CONFIG GET dir 应该返回类似的内容

1) "dir"
2) "/var/lib/redis"

确认这些是正确的,如果不正确,用CONFIG SET dir/correct/path设置它们

希望这对您有所帮助!

关于django - Redis 告诉我 "Failed opening .rdb for saving: Permission denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40095775/

相关文章:

PHPRedis - 时间()不起作用

mysql - 是否可以在没有 redis 的情况下使用 resque/Sidekiq/rails-jobs(使用 MySql)

python - psycopg2.errors.SyntaxError 位于或接近 "WITH ORDINALITY"与 PostgreSQL

python - 当我想稍后填充数据时,django模型抛出IntegrityError : (1048, "Column ' xxx'不能为空”)

django - 在Tornado Web服务器上运行Django以获得异步+ Django管理+ Django Orm可能性的最佳方法是什么?

python - 在 Django-seed 中生成 mobile_number 时出错

java - Spring Data Redis过期键

docker - Netflix/Conductor 打印了太多与 dynomite 相关的日志

python - 如何删除 Django 模型表单的内置错误列表?

redis - 请解释 Redis Pub/Sub 有线协议(protocol)示例