10 个不稳定版本 (4 个破坏性更新)

0.5.0 2021年10月4日
0.4.0 2021年8月8日
0.3.5 2020年4月21日
0.3.2 2020年3月25日
0.1.0 2019年7月11日

#1512 in 命令行实用工具

GPL-3.0-only

22KB
265

eb

eb 是一个小的实用工具,用于带有指数退避的命令执行。

eb 仅在它调用的命令返回状态码 0 或被 Ctrl+C 或其他信号终止时退出。

您可以使用 eb 就像使用 watch 一样。

$ eb -- ssh -oConnectTimeout=0 host

安装它

您可以通过以下方式安装 eb:

$ cargo install eb

并且您可以通过相同的命令更新它。

功能

我们目前支持以下 (cargo) 功能

  • simple_logger 启用 simple_logger 记录器。

默认情况下没有启用任何功能。

算法

在上面的控制台输入中,eb 将监视命令并跟踪其失败所需的时间。第一次失败时,将“槽时间”设置为命令失败所需的时间。

在每次实例中,在 n 次失败之后,选择一个介于 02^n - 1 之间的随机槽时间,并通过这些槽时间进行延迟。因此,第一次失败后,eb 将等待 0 或 1 个槽时间;第二次失败后,这个数字增加到 0 到 3 之间。指数 n 被限制在 0MAX_N 的范围内,其中 MAX_N 是某个预定义的数字;在我们的情况下,这是 10。在实践中,这意味着在 10 次碰撞后,延迟的上限不会增加。由于命令完成所需的时间是可变的,因此槽时间调整为所有执行时间的平均值。延迟将在命令失败后开始得非常快。

由于算法的工作方式,建议在给定命令会快速失败的情况下使用 eb。这将导致最大延迟时间成比例地较小。

许可证

eb: A command executor exercising exponential backoff
Copyright (C) 2019-2021 Kristofer J. Rye

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.

依赖项

~1.4–2.4MB
~36K SLoC