【问题标题】:How can I detect if a GIT server is active?如何检测 GIT 服务器是否处于活动状态?
【发布时间】:2019-01-23 05:03:56
【问题描述】:

服务器:Atlassian Bitbucket v4.14.3(又名 Stash) 客户端:git 版本 2.17.1(在 Linux Ubuntu 18LTS 上)

检测 GIT 服务器是否处于活动状态并提供服务的最佳方法是什么?

用例 1:每天,Bitbucket 服务器都会关闭以执行完整备份。在备份期间,它不会响应请求,并且任何“git clone 和 git push”命令都会失败(我们从脚本发出这些命令)。 在发出 'clone' 或 'push' 之前,我想知道 GIT 服务器是否在生产中以避免错误。

用例 2:有时,Bitbucket 服务器被关闭(用于升级、一些维护等)。与上述情况类似,我想在发出“克隆”或“推送”之前知道它是否在生产中以避免错误。

Bitbucket 服务器是否有一些 API 可以检查? git客户端是否有命令来检查? (我更喜欢这个选项,以避免对服务器的依赖)

我已经尝试过 'git ls-remote -h ssh:/reponame --exit-code' ,但我想知道是否有更好的选择,我不必提供存储库名称。

【问题讨论】:

  • 不回避错误,处理错误。

标签: git bitbucket-server bitbucket-api


【解决方案1】:

您可以发出几乎任何您喜欢的 API 命令来检查服务是否已启动。例如,您可以get info for the current user。这并不意味着 API 稍后仍会启动。

“检查然后执行”不起作用。考虑以下场景。

  1. 检查 Bitbucket 是否已启动。
  2. 起来了!
  3. Bitbucket 出现故障。
  4. 发出 Bitbucket 命令。
  5. 命令失败。

这是计算机科学中的一个常见主题。其他例子包括...

  1. 检查文件是否存在。
  2. 它存在!
  3. 文件被删除。
  4. 尝试打开文件。
  5. 打开失败。

您想检查它是否启动并一次性发出命令,称为“原子”,因为这两个操作不能分开。对于文件,您只需尝试打开文件并查找错误。对于 Git,发出git 命令并检查它是否成功。

对于可能需要多个命令的整个过程,最安全的做法是编写一个健壮的系统来处理过程中任何点的错误。这意味着能够自动重试失败的网络调用,例如git pull,并能够重新启动中途失败的进程。

【讨论】:

    【解决方案2】:

    这是我最终处理它的方式(请注意,根据下面的评论,最好的方法是在发出所需的 git 命令后检查这些错误,以使其成为原子操作):

    1- 使用存储库名称执行“git ls-remote”,并检测它是否返回 0(没有问题)或其他内容。我得到的“其他”值是 128。

    2a- 如果“ls-remote”返回的不是零,请确保服务器是可访问的。查找“未找到 Git 服务器:”

    3b- elif,检查 GIT 服务器是否处于维护模式。由于我的服务器是 Bitbucket,我查找“Bitbucket 当前不可用”。

    3c-elif,检查 GIT 服务器是否正在重新启动。我在重新启动期间收到“连接被拒绝”。

    3d- elif,确认存储库存在。带有“未找到存储库”的 stderr 会给出提示。

    3- 执行所需的 git 命令(然后检查错误)。

    【讨论】:

    • 您可以节省大量时间和精力,并通过直接跳到第 3 步使其更加健壮。
    • 同意。谢谢
    猜你喜欢
    • 2021-07-23
    • 2013-02-15
    • 2012-01-27
    • 1970-01-01
    • 2020-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多