#redis
#redis
Вопрос:
Моя служба redis (установленная из исходного кода) завершается сбоем с этим сообщением в /var/log/redis.log
2309:C 16 Mar 2019 20:16:10.633 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=2309, just started
2309:C 16 Mar 2019 20:16:10.633 # Configuration loaded
2311:M 16 Mar 2019 20:16:10.634 # Can't open the append-only file: Permission denied
Однако:
root@redis:~# sudo su - redis
redis@redis:~$ touch /var/lib/redis/foobar.txt
redis@redis:~$ echo $?
0
Вот мой /etc/redis.conf
root@redis:~# cat /etc/redis.conf
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
dir /var/lib/redis
daemonize yes
logfile "/var/log/redis.log"
и вот мой пользовательский модульный файл для redis
root@redis:~# cat /etc/systemd/system/redis.service
Description=Redis In-Memory Data Store
After=network.target
[Service]
Type=forking
User=redis
Group=redis
PermissionsStartOnly=true
ExecStop=/bin/kill -s TERM $MAINPID
PIDFile=/var/run/redis/redis-server.pid
ExecStart=/opt/redis-stable/src/redis-server /etc/redis.conf
Restart=always
RestartSec=3
LimitNOFILE=65535
ReadWriteDirectories=-/var/lib/redis
ReadOnlyDirectories=/
ReadWriteDirectories=-/var/lib/redis
ReadWriteDirectories=-/var/log/redis
ReadWriteDirectories=-/var/run/redis
[Install]
WantedBy=multi-user.target
Ответ №1:
Redis запускается как некорневая служба, поэтому вам необходимо настроить разрешения для вашего каталога данных перед запуском службы.
Вам просто нужно выполнить эту команду:
sudo chown -R 1001:1001 redis-data/
И перезапустите redis
Комментарии:
1. какой пользователь 1001? Почему 1001?
2. @ante. сабо Вы можете видеть пользователя 1001 на изображении bitnami / redis. Если вы используете другой образ docker, вам нужно найти идентификатор пользователя аналогичным образом. github.com/bitnami/bitnami-docker-redis/blob/master/6.0 /…
Ответ №2:
Ошибка заключается в том, что redis не может записать файл только для добавления. По умолчанию файл только для добавления помещается в каталог, из которого запускается redis.
Я предполагаю, что у пользователя redis нет доступа на запись в папке, из которой запускается. Просто убедитесь, что вы запускаете redis из каталога woring, к которому у пользователя redis есть доступ.
Чтобы узнать больше о файле AOF, ознакомьтесь с документацией:http://redis.io/topics/persistence .
Комментарии:
1. Но я дал указание redis через директиву
dir /var/lib/redis
в/etc/redis.conf
поместить туда файл только для добавления; и какredis
пользователю мне удалось создать там файл;2. Хммм … Я не знаю, но это, безусловно, ошибка с правами доступа к файлам. Попробуйте изменить
dir
директиву на другое место, а также попробуйте запустить в другом каталоге.
Ответ №3:
-известная проблема https://github.com/redis/redis/issues/8172 -Я все еще не смог выяснить, как заставить его работать в kubernetes
Комментарии:
1. Вам необходимо запустить initContainer с помощью команды
['sh', '-c', "until telnet <redis-service-name>.<k8s-user-namespace> 6379; do echo waiting for redis; sleep 1; done"]