web-dev-qa-db-fra.com

Redis Daemon ne crée pas de fichier PID

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)

18
jsmartt

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

14
jsmartt

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

28
jgrocha

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:

CentOs 7: Fichier Systemd & PID

12
Lenin Meza

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)
2
Yavuz Selim

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

0
sebuhi