Systemd: Сервер Redis не запускается при запуске в качестве службы - слишком много уровней символических ссылок

Я недавно столкнулся с проблемой из этой темы. Я установил 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.

Заранее благодарим за любой совет! Ура, Джонни

1
задан 16 August 2017 в 11:46
3 ответа

Файл модуля не является символической ссылкой, это обычный файл:

-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
2
ответ дан 3 December 2019 в 18:29

Эта проблема, кажется, обсуждается здесь https://github.com/systemd/systemd/issues/6318 . Есть ошибка systemd 232, и она, кажется, исправлена ​​путем изменения "ReadWriteDirectories = - / var / run / redis" на "ReadWriteDirectories = - / run / redis" в файле модуля.

1
ответ дан 3 December 2019 в 18:29

Проще говоря, проблема заключается в том, что вы используете имя 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
0
ответ дан 3 September 2021 в 16:59

Теги

Похожие вопросы