2017-10-01 4 views
2

Je ne peux pas arrêter mon serveur redis via le script init. Cela a le énorme effet secondaire de l'accrochage de ma machine lorsque je fais sudo reboot.Impossible de se connecter à Redis à 127.0.0.1:0: Connexion refusée (lors de l'utilisation du script init pour arrêter un serveur redis avec socket unix)

I Redis fraîchement installés à l'aide canonical guide, configurés pour accepter les connexions sur une socket unix, et je suis maintenant tenté de arrêt le serveur afin que je puisse restaurer une décharge .rdb précédemment enregistré.

Mais je continue à obtenir les éléments suivants:

Could not connect to Redis at 127.0.0.1:0: Connection refused 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 
Waiting for Redis to shutdown ... 

La commande J'utilise est sudo /etc/init.d/redis-server stop. Notez que je peux toujours émettre shutdown après m'être connecté à redis-cli -s /var/run/redis.sock, mais j'ai besoin que le script init fonctionne. Pourquoi ne pas éteindre Redis, et comment puis-je résoudre cette situation? La version est Redis server v=4.0.2 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=8ddba2e6a24ce078


Je suis naturellement mis port 0 dans le fichier de configuration, alongwith unixsocket /var/run/redis.sock et unixsocketperm 755.

En outre, le contenu du fichier de script sont:

!/bin/sh 
# 
# Simple Redis init.d script conceived to work on Linux systems 
# as it does use of the /proc filesystem. 

REDISPORT=0 
EXEC=/usr/local/bin/redis-server 
CLIEXEC=/usr/local/bin/redis-cli 

PIDFILE=/var/run/redis.pid 
CONF="/etc/redis/redis.conf" 

case "$1" in 
    start) 
     if [ -f $PIDFILE ] 
     then 
       echo "$PIDFILE exists, process is already running or crashed" 
     else 
       echo "Starting Redis server..." 
       $EXEC $CONF 
     fi 
     ;; 
    stop) 
     if [ ! -f $PIDFILE ] 
     then 
       echo "$PIDFILE does not exist, process is not running" 
     else 
       PID=$(cat $PIDFILE) 
       echo "Stopping ..." 
       $CLIEXEC -p $REDISPORT shutdown 
       while [ -x /proc/${PID} ] 
       do 
        echo "Waiting for Redis to shutdown ..." 
        sleep 1 
       done 
       echo "Redis stopped" 
     fi 
     ;; 
    *) 
     echo "Please use start or stop as first argument" 
     ;; 
esac 

Remarque REDISPORT=0, comme il devrait être. Actuellement, cela ne supporte pas vraiment l'arrêt et le démarrage du serveur redis.

+0

Vous utilisez l'authentification par mot de passe? Si oui, ce PR peut faire la lumière: https://github.com/antirez/redis/pull/2069 –

Répondre

0

J'ai effectué des personnalisations dans le script init publié dans la question. J'ai dû faire redis 'init script support unix socket basé sur l'arrêt. Il ne supporte pas cette OOTB.

Voilà comment mon script a fini à la recherche:

#!/bin/sh 
# 
# Simple Redis init.d script conceived to work on Linux systems 
# as it does use of the /proc filesystem. 

REDISPORT=0 
EXEC=/usr/local/bin/redis-server 
CLIEXEC=/usr/local/bin/redis-cli 

REDISSOCKET="/var/run/redis.sock" 

PIDFILE=/var/run/redis.pid 
CONF="/etc/redis/redis.conf" 

case "$1" in 
    start) 
     if [ -f $PIDFILE ] 
     then 
       echo "$PIDFILE exists, process is already running or crashed" 
     else 
       echo "Starting Redis server..." 
       $EXEC $CONF 
     fi 
     ;; 
    stop) 
     if [ ! -f $PIDFILE ] 
     then 
       echo "$PIDFILE does not exist, process is not running" 
     else 
       echo "Stopping ..." 
       PID=$(cat $PIDFILE) 
       if [ $REDISPORT -eq 0 ] && [ -n "$REDISSOCKET" ] 
       then 
         $CLIEXEC -s $REDISSOCKET shutdown 
       else 
         $CLIEXEC -p $REDISPORT shutdown 
       fi 
       while [ -x /proc/${PID} ] 
       do 
        echo "Waiting for Redis to shutdown ..." 
        sleep 1 
       done 
       echo "Redis stopped" 
     fi 
     ;; 
    *) 
     echo "Please use start or stop as first argument" 
     ;; 
esac 

Une fois que vous avez changé le script, en essayant l'émission sudo service redis-server stop. Si le redis-server a été ajouté aux niveaux d'exécution nécessaires, cela devrait fonctionner.

Sinon, essayez simplement sudo /etc/init.d/redis-server stop.


Note: un problème similaire a été résolu ici: https://groups.google.com/forum/#!topic/redis-db/o-fC_B-fjPs