Недавно столкнулся с проблемой из сабжа. Я установил Debian 9 в качестве веб-сервера (с nginx, php7.0-fpm и некоторыми другими вещами), и я хочу использовать redis с моей установкой PHP. При установке из официальных репозиториев пакет устанавливается нормально, но модуль systemd не запускается или не включается. Когда я пытаюсь запустить команду из «ExecStart» из файла модуля вручную, redis запускается нормально и готов к работе.
Вот файл модуля (предоставленный пакетом Debian, я не вносил изменений):
[Unit]
Description=Advanced key-value store
After=network.target
Documentation=http://redis.io/documentation, man:redis-server(1)
[Service]
Type=forking
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
PIDFile=/var/run/redis/redis-server.pid
TimeoutStopSec=0
User=redis
Group=redis
RunTimeDirectory=redis
ExecStartPre=-/bin/run-parts --verbose /etc/redis/redis-server.pre-up.d
ExecStartPost=-/bin/run-parts --verbose /etc/redis/redis-server.post-up.d
ExecStop=-/bin/run-parts --verbose /etc/redis/redis-server.pre-down.d
ExecStop=/bin/kill -s TERM $MAINPID
ExecStopPost=-/bin/run-parts --verbose /etc/redis/redis-server.post-down.d
UMask=007
PrivateTmp=yes
LimitNOFILE=65535
PrivateDevices=yes
ProtectHome=yes
ReadOnlyDirectories=/
ReadWriteDirectories=-/var/lib/redis
ReadWriteDirectories=-/var/log/redis
ReadWriteDirectories=-/var/run/redis
CapabilityBoundingSet=~CAP_SYS_PTRACE
# redis-server writes its own config file when in cluster mode so we allow
# writing there (NB. ProtectSystem=true over ProtectSystem=full)
ProtectSystem=true
ReadWriteDirectories=-/etc/redis
[Install]
WantedBy=multi-user.target
Alias=redis.service
Вот результат команды journalctl -xe после запуска "systemctl start redis":
-- Subject: Unit redis-server.service has begun start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit redis-server.service has begun starting up.
Aug 16 10:39:05 hathor systemd[9337]: redis-server.service: Failed at step NAMESPACE spawning /bin/run-parts: Too many levels of symbolic links
-- Subject: Process /bin/run-parts could not be executed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- The process /bin/run-parts could not be executed and failed.
--
-- The error number returned by this process is 40.
Aug 16 10:39:05 hathor systemd[9340]: redis-server.service: Failed at step NAMESPACE spawning /usr/bin/redis-server: Too many levels of symbolic links
-- Subject: Process /usr/bin/redis-server could not be executed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- The process /usr/bin/redis-server could not be executed and failed.
--
-- The error number returned by this process is 40.
Aug 16 10:39:05 hathor systemd[1]: redis-server.service: Control process exited, code=exited status=226
Aug 16 10:39:05 hathor systemd[1]: Failed to start Advanced key-value store.
-- Subject: Unit redis-server.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Unit redis-server.service has failed.
--
-- The result is failed.
Aug 16 10:39:05 hathor systemd[1]: redis-server.service: Unit entered failed state.
Aug 16 10:39:05 hathor systemd[1]: redis-server.service: Failed with result 'exit-code'.
А вот сообщение об ошибке "systemctl enable redis", которое кажется мне наиболее загадочным:
root /lib/systemd/system $ systemctl enable redis
Failed to enable unit: Refusing to operate on linked unit file redis.service
root /lib/systemd/system $ systemctl enable redis-server
Synchronizing state of redis-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable redis-server
Юнит-файл не является символической ссылкой, это обычный файл:
-rw-r--r-- 1 root root 1.2K Aug 16 10:32 redis-server.service
Никакие точки в / etc /, / var / run не являются символическими ссылками или точками монтирования. На этом сервере существует только одно монтирование в / mnt / backup. Я также должен упомянуть, что этот сервер является VPS на хосте OpenVZ. Версия systemd - 232, Debian полностью обновлен до последней версии пакетов с ядром 3.16.6-042stab123.8.
Спасибо заранее за любые советы! Привет, Джонни
Юнит-файл не является символической ссылкой, это обычный файл:
-rw-r--r-- 1 root root 1.2K Aug 16 10:32 redis-server.service
Вы проверяете не тот файл. Сообщение об ошибке касается redis.service
. Проверьте, символьная это ссылка или нет.
Кстати, список файлов пакета не упоминает redis.service
файл. Это действительно так? А может вы сами его создали?
В любом случае, когда systemd отказывается выполнить 'enable' для символической ссылки, активируя файл модуля по пути может работать:
$ sudo systemctl enable /lib/systemd/system/redis-server.service
Этот вопрос вроде бы обсуждается здесь https://github.com/systemd/systemd/issues/6318. Есть ошибка systemd 232, и она, кажется, исправлена путем изменения "ReadWriteDirectories = - / var / run / redis" на "ReadWriteDirectories = - / run / redis" в файле модуля.