Le script de démarrage de Redis est censé créer un fichier pid au démarrage, mais j'ai confirmé tous les paramètres que je peux trouver et aucun fichier pid n'est jamais créé.
J'ai installé redis en:
$ yum install redis
$ chkconfig redis on
$ service redis start
Dans mon fichier de configuration (/etc/redis.conf), j'ai vérifié que ceux-ci étaient activés:
daemonize yes
pidfile /var/run/redis/redis.pid
Et dans le script de démarrage (/etc/init.d/redis) il y a:
exec="/usr/sbin/$name"
pidfile="/var/run/redis/redis.pid"
REDIS_CONFIG="/etc/redis.conf"
[ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis
lockfile=/var/lock/subsys/redis
start() {
[ -f $REDIS_CONFIG ] || exit 6
[ -x $exec ] || exit 5
echo -n $"Starting $name: "
daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG"
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $name: "
killproc -p $pidfile $name
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
Ce sont les paramètres fournis par défaut avec l'installation. Une idée pourquoi aucun fichier pid n'est créé? Je dois l'utiliser pour Monit. (Le système est RHEL 6,4 btw)
Le problème était que l'utilisateur redis n'avait pas l'autorisation de créer le fichier pid (ou le répertoire dans lequel il se trouvait). Réparer:
Sudo mkdir /var/run/redis
Sudo chown redis /var/run/redis
Ensuite, j'ai tué et redémarré redis et bien sûr, il y avait redis.pid
Sur mon Ubuntu 18.04, j'obtenais la même erreur.
Erreur signalée par redis
(le /var/log/redis/redis-server.log
): # Creating Server TCP listening socket ::1:6379: bind: Cannot assign requested address
En effet, j'ai désactivé IPv6 sur cet hôte et redis-server
le package (version 5: 4.0.9-1) pour Ubuntu est livré avec: bind 127.0.0.1 ::1
Modification /etc/redis/redis.conf
et commenter la ligne, ou supprimer le ::1
l'adresse résout le problème. Exemple: # bind 127.0.0.1 ::1
Dans CentOs 7, je dois ajouter au fichier:
$ vi /usr/lib/systemd/system/redis.service
La ligne suivante:
ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid"
Et puis redémarrez le service:
$ Sudo systemctl daemon-reload
$ Sudo systemctl restart redis.service
Référence:
Ici à partir de 2018
Avant de commencer, je suis sur Ubuntu 18.04.J'ai écrit ceci si quelqu'un vient ici en recherchant la même erreur.
Dans mon cas, l'erreur est la même mais le problème est tellement différent. Aucune solution proposée ici n'a fonctionné.
J'ai donc vérifié les journaux s'ils existent et j'ai recherché quelque chose d'utile. Je les ai trouvés;
cat /var/log/redis/redis-server.log
Les journaux recherchés et ont trouvé que le problème est qu'un autre service est écoute le même port.
2963:C 21 Sep 11:07:33.007 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2963:C 21 Sep 11:07:33.008 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=2963, just started
2963:C 21 Sep 11:07:33.008 # Configuration loaded
2974:M 21 Sep 11:07:33.009 # Creating Server TCP listening socket 127.0.0.1:6379: bind: Address already in use
J'ai vérifié qui écoute.
netstat anp | grep 6379
Je l'ai trouvé.
tcp6 0 0 :::6379 :::* LISTEN 3036/docker-proxy
C'était l'image docker de redis qui était installée par un autre outil
root@yavuz:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6a94d401700 redis:3.2 "docker-entrypoint.s…" 20 hours ago Up 3 hours 0.0.0.0:6379->6379/tcp incubatorsuperset_redis_1
J'ai donc arrêté l'image docker
root@yavuz:~# docker stop incubatorsuperset_redis_1
Et redis-server a démarré sans problème.
root@yavuz:~# systemctl start redis-server
root@yavuz:~# systemctl status redis-server
● redis-server.service - Advanced key-value store
Active: active (running) since Fri 2018-09-21 11:10:34 +03; 1min 49s ago
Process: 3671 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Sur mon bus Debian, j'étais confronté au même problème.
Dans mon cas, l'erreur était: redis-server.service: Can't open PID file /var/run/redis/redis-server.pid (yet?) after start: No such file or directory after starting redis server
. Chaque fois que je redémarrais le serveur redis, je faisais face à un problème similaire.
Modification nano /etc/systemd/system/redis.service
et en ajoutant cette ligne sous [Service]:
ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid"
Cela suppose de ressembler à ceci:
[Service]
Type=forking
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
ExecStop=/bin/kill -s TERM $MAINPID
ExecStartPost=/bin/sh -c "echo $MAINPID > /var/run/redis/redis.pid"
PIDFile=/run/redis/redis-server.pid
puis:
Sudo systemctl daemon-reload
Sudo systemctl restart redis.service
Vérifiez l'état de redis.service:
Sudo systemctl status redis.service