Systemd: o servidor Redis não iniciará quando executado como um serviço - muitos níveis de links simbólicos

1

Recentemente encontrei a questão do assunto. Eu instalei o Debian 9 como um servidor web (com nginx, php7.0-fpm e algumas outras coisas) e eu quero usar o redis com a minha instalação do PHP. Ao instalá-lo a partir dos repositórios oficiais, o pacote é instalado bem, mas a unidade do systemd não consegue iniciar ou ativar. Quando tento executar manualmente o comando "ExecStart" do arquivo de unidade, o redis é iniciado corretamente e está operacional.

Aqui está o arquivo de unidade (fornecido pelo pacote Debian, eu não fiz modificações):

[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

Aqui está a saída do journalctl -xe depois de executar "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'.

E aqui está a mensagem de erro que "systemctl enable redis" fornece, que é o mais enigmático para mim:

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

O arquivo de unidade não é um link simbólico, é um arquivo normal:

-rw-r--r--  1 root root 1.2K Aug 16 10:32 redis-server.service

Nenhum ponto em / etc /, / var / run são links simbólicos ou mountpoins. Apenas uma montagem em / mnt / backup existe neste servidor. Também devo mencionar que este servidor é um VPS em um host OpenVZ. A versão do Systemd é 232, o Debian está totalmente atualizado para a versão mais recente dos pacotes com o kernel 3.16.6-042stab123.8.

Agradecemos antecipadamente por qualquer conselho! Felicidades, Johny

    
por j0hny 16.08.2017 / 10:46

1 resposta

1

The unit file is not a symlink, it is a regular file:

-rw-r--r-- 1 root root 1.2K Aug 16 10:32 redis-server.service

Você está verificando o arquivo errado. A mensagem de erro é sobre o redis.service . Verifique se é um link simbólico ou não.

A propósito, a lista de arquivos do pacote não menciona o arquivo redis.service . Está lá realmente? Ou talvez você tenha criado sozinho?

Em qualquer caso, quando o systemd se recusa a executar 'enable' em um symlink, habilitando o arquivo de unidade caminho pode funcionar:

$ sudo systemctl enable /lib/systemd/system/redis-server.service
    
por 03.04.2018 / 23:52