Redis告诉我“无法打开用于保存的.rdb:权限被拒绝”

Ray*_*Ray 4 django redis

我在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...
Run Code Online (Sandbox Code Playgroud)

我检查了redis日志,发现每秒大约发生一次:

1 changes in 900 seconds.  Saving...
Background saving started by pid 22213
Failed opening .rdb for saving: Permission denied
Background saving error
Run Code Online (Sandbox Code Playgroud)

我读过这两个SO问题12,但他们并没有帮助我找到问题。

ps显示用户“ redis”正在运行服务器:

redis   26769   ...   /usr/bin/redis-server *.6379
Run Code Online (Sandbox Code Playgroud)

我检查了配置文件中的redis文件名和路径:

grep ^dir /etc/redis/redis.conf =>
dir /var/lib/redis

grep ^dbfilename /etc =>
dbfilename dump.rdb
Run Code Online (Sandbox Code Playgroud)

/ 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
Run Code Online (Sandbox Code Playgroud)

但是,当我检查输出时,没有看到任何错误。特别是,我没有看到预期的“权限被拒绝”错误。

另外,/ var / lib / redis也不是NFS目录。

有谁知道还有什么可能导致这种情况?我讨厌不得不停止使用Redis。我知道我可以运行命令“ set stop-writes-on-bgsave-error yes”,但这不能解决问题。

现在,这种情况每天都在发生,而我可以停止错误的唯一方法是重新启动Redis服务器。

谢谢。

小智 5

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

运行redis-cli然后

CONFIG GET dbfilename应该返回类似

1) "dbfilename"
2) "dump.rdb"
Run Code Online (Sandbox Code Playgroud)

1)只是键,而2)是值。同样,然后运行CONFIG GET dir应返回类似

1) "dir"
2) "/var/lib/redis"
Run Code Online (Sandbox Code Playgroud)

确认是否正确,如果不正确,请使用 CONFIG SET dir /correct/path

希望这可以帮助!