Назад | Перейти на главную страницу

Задание Cron не переводит Redis в подчиненный режим

В моей организации Redis работает в конфигурации Master / Slave, используя Keepalived для переключения между ними. Было обнаружено, что, когда экземпляр Slave по какой-то причине умирает, Keepalived не перезапускает его. Я начал писать задание cron, чтобы проверить, работает ли redis, и если подчиненное устройство умирает, перезапустить его.

#!/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

Он запускается и перезапускает Redis. Однако он не переводит Redis в подчиненный режим. Если я напечатаю

redis-cli SLAVEOF 10.19.105.229 6379

на моем терминале, однако, он переходит в подчиненный режим. Любые идеи?

Возможно ли, что в самом сокровенном else блок, вызов redis-server немедленно возвращается, но сам сервер запускается более одной секунды? В таком случае, wait не будет ждать достаточно долго.

Вы пробовали написать в скрипте полный путь к redis-cli и redis-server? Или просто установите переменную PATH в начале скрипта и сделайте то же самое, что вы видите при вводе echo $PATH в вашем терминале.