Я использую 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.
Оказывается, сценарий инициализации, включенный в Redis, на самом деле не используется, а вместо этого использует /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
to redis работает, это должно исправить ошибку.