如何检测GIT服务器是否处于活动状态?

时间:2019-01-11 19:13:56

标签: git bitbucket-server bitbucket-api

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

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

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

用例2:不时关闭Bitbucket服务器(以进行升级,维护等)。与上面的情况类似,我想在发出“克隆”或“推送”以避免错误之前知道它是否已投入生产。

Bitbucket服务器是否有一些API可以检查? git客户端是否有命令来检查? (我希望使用此选项,以避免依赖服务器)

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

2 个答案:

答案 0 :(得分:1)

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

“先检查再做”不起作用。请考虑以下情形。

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

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

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

您要检查它是否启动并一次发出该命令,称为“原子”命令,因为这两个操作无法分开。如果是文件,则只需尝试打开文件并查找错误。对于Git,发出refresh:命令并检查是否成功。

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

答案 1 :(得分:-1)

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

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

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

3belif,检查GIT服务器在维护模式下是否处于关闭状态。由于我的服务器是Bitbucket,因此我查找“ Bitbucket当前不可用”。

3ceif,检查GIT服务器是否正在重启。重新启动过程中出现“连接被拒绝”的提示。

3d- elif,确认存储库存在。带有“未找到存储库”的标准错误提示。

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