J'ai récemment rencontré le problème du sujet. J'ai installé Debian 9 en tant que serveur Web (avec nginx, php7.0-fpm et d'autres éléments) et je souhaite utiliser redis avec mon installation PHP. Lors de l'installation à partir des dépôts officiels, le package s'installe correctement, mais l'unité systemd ne parvient pas à démarrer ou à s'activer. Lorsque j'essaie d'exécuter manuellement la commande à partir de "ExecStart" à partir du fichier d'unité, redis démarre correctement et est opérationnel.

Voici le fichier unitaire (fourni par le paquet Debian, je n'ai fait aucune modification) :

[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

Voici la sortie de journalctl -xe après avoir exécuté "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'.

Et voici le message d'erreur que "systemctl enable redis" donne, qui est pour moi le plus cryptique :

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

Le fichier unitaire n'est pas un lien symbolique, c'est un fichier normal :

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

Aucun point dans /etc/, /var/run n'est un lien symbolique ou un point de montage. Un seul montage dans /mnt/backup existe sur ce serveur. Je dois également mentionner que ce serveur est un VPS sur un hôte OpenVZ. La version Systemd est 232, Debian est entièrement mis à niveau vers la dernière version des paquets avec le noyau 3.16.6-042stab123.8.

Merci d'avance pour tout conseil! Salut, Jean

answer

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

Vous vérifiez le mauvais fichier. Le message d'erreur concerne le redis.service. Vérifiez s'il s'agit d'un lien symbolique ou non.

Soit dit en passant, la liste des fichiers du package ne mentionne pas le redis.servicefichier. Est-ce là en fait ? Ou peut-être l'avez-vous créé vous-même ?

Dans tous les cas, lorsque systemd refuse d'effectuer « enable » sur un lien symbolique, l'activation du fichier d'unité par chemin peut fonctionner :

$ sudo systemctl enable /lib/systemd/system/redis-server.service

Ce problème semble être discuté ici https://github.com/systemd/systemd/issues/6318 . Il y a un bogue avec systemd 232 et il semble être corrigé en remplaçant "ReadWriteDirectories=-/var/run/redis" par "ReadWriteDirectories=-/run/redis" dans le fichier d'unité.

Le problème en termes simples, c'est que vous utilisez le nom redisau lieu du nom réel redis-server.

Apparemment, le redisnom est alias pour faciliter les choses, mais a d'autres problèmes comme vous l'avez noté.

systemctl redis-server start

Cela le démarrera correctement :

[email protected]:# 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.

Pour exécuter le service au démarrage :

systemctl redis-server enable