Cron 作业未将 Redis 置于从属模式

Cron 作业未将 Redis 置于从属模式

我的组织在主/从配置中运行 Redis,并使用 Keepalived 在两者之间切换。我发现,当从属实例因某种原因死亡时,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

但是在我的终端上,它进入了从属模式。有什么想法吗?

答案1

有没有可能,在最内层的else块中,对的调用redis-server立即返回,但服务器本身却需要一秒钟以上的时间才能启动?在这种情况下,wait不会等待足够长的时间。

答案2

您是否尝试过在脚本中写入 redis-cli 和 redis-server 的完整路径?或者只需在脚本开头设置 PATH 变量,并使其与您echo $PATH在终端中输入时看到的相同。

相关内容