Я недавно столкнулся с проблемой из этой темы. Я установил 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.
Заранее благодарим за любой совет!
Вот файл модуля (предоставленный пакетом 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 не является символическими ссылками или Mountpoins. На этом сервере существует только одно монтирование в / mnt / backup. Я также должен упомянуть, что этот сервер является VPS на хосте OpenVZ. Версия systemd - 232, Debian полностью обновлен до последней версии пакетов с ядром 3.16.6-042stab123.8.
Заранее благодарим за любой совет!
Вот файл модуля (предоставленный пакетом 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 не является символическими ссылками или Mountpoins. На этом сервере существует только одно монтирование в / mnt / backup. Я также должен упомянуть, что этот сервер является VPS на хосте OpenVZ. Версия systemd - 232, Debian полностью обновлен до последней версии пакетов с ядром 3.16.6-042stab123.8.
Заранее благодарим за любой совет!
-- 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.
Заранее благодарим за любой совет!
-- 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 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" в файле модуля.
Проще говоря, проблема заключается в том, что вы используете имя redis
вместо настоящего имени redis-server
.
Очевидно, имя redis
создано с псевдонимом, чтобы упростить задачу, но, как вы заметили, у него есть другие проблемы.
systemctl redis-server start
Это запустит его правильно:
root@luna:# service redis-server status
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Fri 2021-09-03 11:48:50 CDT; 4s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 986762 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Main PID: 986779 (code=exited, status=0/SUCCESS)
Sep 03 11:48:17 luna systemd[1]: Starting Advanced key-value store...
Sep 03 11:48:17 luna systemd[1]: redis-server.service: Can't open PID file /run/redis/redis-server.pid (yet?) after start: Op>
Sep 03 11:48:17 luna systemd[1]: Started Advanced key-value store.
Sep 03 11:48:50 luna systemd[1]: Stopping Advanced key-value store...
Sep 03 11:48:50 luna systemd[1]: redis-server.service: Succeeded.
Sep 03 11:48:50 luna systemd[1]: Stopped Advanced key-value store.
Чтобы запустить службу при загрузке:
systemctl redis-server enable