Задание 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 в режим slave. Если я наберу
redis-cli SLAVEOF 10.19.105.229 6379
на моем терминале, однако, он переходит в подчиненный режим. Есть идеи?
2 ответа
Возможно ли, что в вашей внутренней else
блок, вызов redis-server
немедленно возвращается, но сам сервер занимает более одной секунды для запуска? В таком случае, wait
не буду ждать достаточно долго
Вы пытались написать полный путь к redis-cli и redis-server в скрипте? Или просто установите переменную PATH в начале скрипта и сделайте ее такой же, какой вы видите при вводе echo $PATH
в вашем терминале.