我正在尝试编写一个 Bash 脚本来检查 Redis 是否正在运行并在未运行时启动它:
ping=$(redis-cli ping)
if [ "$ping" = PONG ]
then
ECHO "redis response: $ping"
else
response = $(redis-server /usr/local/etc/redis.conf)
ECHO "$response"
fi
如果 Redis 正在运行,我会得到预期的 redis response:PONG
但是,如果 Redis 未运行,我将收到 Could not connect to Redis at 127.0.0.1:6379: Connection refused
并且 Redis 无法启动。
我认为正在发生的事情是“无法连接”消息被视为未捕获的异常,因此终止了脚本。
有没有办法捕捉到并完成脚本的运行?这就是问题所在吗?
最佳答案
脚本的以下更新完全符合我的要求:
ping=$(redis-cli ping)
if [ "$ping" = PONG ]
then
ECHO "Redis response: $ping"
else
ECHO starting Redis
redis-server /usr/local/etc/redis.conf
fi
ECHO "$(redis-cli ping)"
正如 Janos 在他的第二条评论中正确指出的那样,else 语句正在执行。
让我失望的是 ECHO $response
没有在原始脚本中打印。我猜测启动 Redis 的前一行是一个异步操作。因此,在 Redis 运行之前调用了 ECHO $response
。
Redis 未运行时打印的 ping 响应也让我感到困惑。脚本逻辑规定只有在 $ping = PONG
时才应该打印响应,并且应该在前面加上“Redis Response:”。我仍然不确定为什么它会打印“连接失败”消息,但是无论如何......
再次感谢亚诺斯
关于bash - 如何阻止 Bash 脚本因错误而退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42103190/