bash - 如何阻止 Bash 脚本因错误而退出

标签 bash shell redis

我正在尝试编写一个 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/

相关文章:

windows - 在 Windows 上运行 docker shell

linux - 国家和外部 IP Bash 脚本

regex - 如何在 bash 中替换字符串中的模式

bash - 具体来说,当您在终端中按下 Ctrl-C 时会发生什么?

redis - 重启 Redis 副本

python - 从 nohup 开始时如何将参数传递给 python 脚本

c - 不知道文件名的测试人员

python-3.x - 在 Python3 中运行 linux shell 命令

Redis SET命令不能失败,但是可以吗?

redis - 为什么要从 ServiceStack/Service.cs 文件中删除 RedisManager 属性?