J'ai également rencontré le même problème. Ma situation à l'époque était la suivante : en utilisant Puppet pour la livraison et le déploiement automatiques de Redis, après avoir activé le mot de passe d'authentification pour Redis et fermé le service dans Puppet, Puppet se figeait et ne pouvait pas continuer. Plus tard, la même chose a été découverte lors de la localisation manuelle du problème. La raison est en fait que le script de contrôle de service fourni par l'auteur Redis dans le package de code source ne prend pas en compte la manière d'arrêter le service après avoir ajouté le mot de passe d'authentification. La méthode d'arrêt avec mot de passe est : redis-cli -p port-a password shutdown Parce que j'utilise puppet pour déployer redis, j'ai transformé ce script en modèle de fichier marionnette. Si j'ajoute un mot de passe, il le fera automatiquement. modifier les scripts de contrôle de service. J'ai posté le modèle, j'espère qu'il vous aidera.
#!/bin/sh
#Configurations injected by install_server below....
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_<%= name %>.pid
CONF="/etc/redis/<%= name %>.conf"
REDISPORT="<%= name %>"
###############
# SysV Init Information
# chkconfig: - 58 74
# description: redis_<%= name %> is the redis daemon.
### BEGIN INIT INFO
# Provides: redis_<%= name %>
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Should-Start: $syslog $named
# Should-Stop: $syslog $named
# Short-Description: start and stop redis_<%= name %>
# Description: Redis daemon
### END INIT INFO
case "" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis_$REDISPORT server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
<% if @password == 'nopass' -%>
$CLIEXEC -p $REDISPORT shutdown
<% else -%>
$CLIEXEC -p $REDISPORT -a <%= @password %> shutdown
<% end -%>
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis_$REDISPORT to shutdown ..."
sleep 2
done
echo "Redis_$REDISPORT stopped"
fi
;;
status)
PID=$(cat $PIDFILE)
if [ -f $PIDFILE ]
then
if [ ! -x /proc/${PID} ]
then
echo 'Redis_$REDISPORT is not running'
rm -rf $PIDFILE
exit 1
else
echo "Redis_$REDISPORT is running"
fi
else
echo 'No PID File,Redis_$REDISPORT is not running'
exit 1
fi
;;
restart)
rrreee stop
rrreee start
;;
*)
echo "Please use start, stop, restart or status as first argument"
;;
esac
Actuellement, j'ai temporairement créé un script pour arrêter Redis et je l'exécute manuellement avant d'arrêter la machine virtuelle. Un peu de frottement.
Comme la programmation Shell n'est pas familière, vous devez quand même apprendre votre script. Cependant, si redis-cli n'a pas de clé, il devrait renvoyer une erreur NOAUTH. Vous devez porter un jugement après l'avoir capturé et réutiliser redis-cli+key pour fermer Redis.
Enfin, recherchez le script d'arrêt correspondant dans le répertoire /etc/init pour voir comment l'intégrer.
J'ai également rencontré le même problème.
Ma situation à l'époque était la suivante : en utilisant Puppet pour la livraison et le déploiement automatiques de Redis, après avoir activé le mot de passe d'authentification pour Redis et fermé le service dans Puppet, Puppet se figeait et ne pouvait pas continuer. Plus tard, la même chose a été découverte lors de la localisation manuelle du problème.
La raison est en fait que le script de contrôle de service fourni par l'auteur Redis dans le package de code source ne prend pas en compte la manière d'arrêter le service après avoir ajouté le mot de passe d'authentification.
La méthode d'arrêt avec mot de passe est : redis-cli -p port-a password shutdown
Parce que j'utilise puppet pour déployer redis, j'ai transformé ce script en modèle de fichier marionnette. Si j'ajoute un mot de passe, il le fera automatiquement. modifier les scripts de contrôle de service. J'ai posté le modèle, j'espère qu'il vous aidera.
Redis
peut être fermé en exécutant la commandeSHUTDOWN
sur le client.Actuellement, j'ai temporairement créé un script pour arrêter Redis et je l'exécute manuellement avant d'arrêter la machine virtuelle. Un peu de frottement.
Comme la programmation Shell n'est pas familière, vous devez quand même apprendre votre script. Cependant, si redis-cli n'a pas de clé, il devrait renvoyer une erreur NOAUTH. Vous devez porter un jugement après l'avoir capturé et réutiliser redis-cli+key pour fermer Redis.
Enfin, recherchez le script d'arrêt correspondant dans le répertoire /etc/init pour voir comment l'intégrer.