Redis 作为服务运行时无法启动 - 无法 chdir:权限被拒绝

Redis 作为服务运行时无法启动 - 无法 chdir:权限被拒绝

几个月来,我一直在运行从源代码构建的 redis,但今天我切换到使用包管理器(在 Debian 上运行)。它运行良好,直到我将工作目录更改为/home/redis/server。现在,当使用 将其作为服务启动时sudo service redis-server start,我收到一个错误,并且以下内容添加到 redis 日志中:

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

getfacl在 redis 目录上递归运行返回

# 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

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

答案1

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

此后,运行systemctl daemon-reload以在运行之前重新加载更改service start redis-server

答案2

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

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

--chuid redis:redis

在哪里start-stop-daemon调用。由于suredis 正在运行,这应该可以修复错误。

相关内容