Назад | Перейти на главную страницу

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.

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