作为服务运行时,Redis不启动 – 不能chdir:权限被拒绝

我已经运行了几个月从源代码构build的redis,但是我今天转而使用了一个软件包pipe理器(在Debian上运行)。 它运行良好,直到我将工作目录更改为/home/redis/server 。 现在,当使用sudo service redis-server start ,出现错误,并将以下内容添加到redis日志中:

 Can't chdir to '/home/redis/server': Permission denied 

recursion地在redis目录下运行getfacl返回

 # file: . # owner: redis # group: redis user::rwx group::rwx other::rwx # file: server # owner: redis # group: redis user::rwx group::rwx other::rwx # file: server/dump.rdb # owner: redis # group: redis user::rwx group::rwx other::rwx 

如果我使用/usr/bin/redis-server /etc/redis/redis.conf进行redis的手工运行,它/usr/bin/redis-server /etc/redis/redis.conf正常工作,所以只有在尝试使用包含的init.d脚本时才会发生。

事实certificate,Redis中包含的init脚本实际上并未使用,而是使用/etc/systemd/system/redis.service 。 这个文件中有许多安全限制,包括ProtectHome=yes和限制可以写入的目录。 我已经修改这个文件来注释掉ProtectHome=yes并添加一行ReadWriteDirectories=-/home/redis/server ,现在它可以正常工作。

你应该确保redis服务是由init.d和redis用户上下文启动的。

编辑/etc/init.d/redis-server并添加

 --chuid redis:redis 

start-stop-daemon被调用。 由于su到redis工作,这应该修复错误。