Tarefa Cron não colocando Redis no modo escravo

2

Minha organização tem Redis executando em uma configuração Mestre / Escravo, usando Keepalived para alternar entre os dois. Foi descoberto que quando a instância Slave morre por algum motivo, o Keepalived não a reinicia. Eu comecei a escrever um cron job para checar e ver se o redis está rodando, e se o slave morre, para reiniciá-lo.

#!/bin/bash
#redis_cron_restart.sh
######variables########
REDIS_IP="10.19.105.229"
REDIS_CONF="/var/lib/redis/redis.conf"
#Check to see if Redis is running
killall -0 redis-server
if [ $? -eq 1 ]
        then
                date >> /var/lib/redis/log.txt
                echo redis-server not running. Checking redis master >> /var/lib/redis/log.txt
                redis-cli -h ${REDIS_IP} PING
                if [ $? -eq 1 ]
                        then
                                echo redis master not running. Doing nothing. >> /var/lib/redis/log.txt
                        else
                                echo redis master is running. I must be the slave. Restarting keepalived >> /var/lib/redis/log.txt
                                redis-server ${REDIS_CONF}
                                sleep 1
                                wait
                                redis-cli SLAVEOF ${REDIS_IP} 6379
                fi
        else
                echo redis-server running. >> /var/lib/redis/log.txt
fi

Ele é executado e reinicia o Redis. Não coloca, no entanto, Redis no modo escravo. Se eu digitar

redis-cli SLAVEOF 10.19.105.229 6379

no meu terminal, no entanto, ele entra no modo escravo. Alguma idéia?

    
por Chris 14.09.2012 / 21:35

2 respostas

6

É possível que, em seu bloco mais interno else , a chamada para redis-server esteja retornando imediatamente, mas o próprio servidor está demorando mais de um segundo para inicializar? Nesse caso, wait não esperará tempo suficiente.

    
por 14.09.2012 / 21:57
2

Você já tentou escrever o caminho completo para redis-cli e redis-server no script? Ou simplesmente defina a variável PATH no início do script e faça o mesmo que você vê quando digita echo $PATH no seu terminal.

    
por 14.09.2012 / 21:50