首页 > 解决方案 > 脚本的多个输出到一个速率

问题描述

在进行系统管理时,我经常编写单行代码来获取进程的状态,或者一些值,例如已用磁盘空间、处理的文件数或剩余秒数(例如复制)。我使用watch循环中的或回显之类的工具date来实时评估状态。

通常我知道我正在观察的值的结果:它会上升到一个定义的数字,或者为零。要计算完成的预期时间(某些过程需要几个小时),我会将一些时间戳和值放在电子表格中,计算时间戳之间值的一些增量或减量率,然后平均速率并推断以估计预期进程的结束时间。

我正在寻找一种方法来自动执行此操作,就像pv为管道执行此操作一样。我希望它能够像这样工作:

$ rate --expected-value=0 --interval=10 "mysql -e 'show slave status' -E | grep Seconds_Behind_Master | awk '{print $2}'"
Fri May 31 10:31:48 CEST 2019 | value: 52952
Fri May 31 10:31:58 CEST 2019 | value: 52918 | rate: 3.4/s | ETA: 10:57:27
Fri May 31 10:32:08 CEST 2019 | value: 52886 | rate: 3.2/s | ETA: 10:58:29

或者另一个例子:

$ rate --unit byte --interval=1 "stat / -f -t | awk '{print $9}'"
Fri May 31 10:58:03 CEST 2019 | value: 11908091
Fri May 31 10:58:04 CEST 2019 | value: 11829190 | rate: 78900 bytes/s

这些当然是例子,虚构的rate效用是不存在的。我可以自己构建它,但我想知道是否有一个现有的实用程序(我还没有找到)可以做到这一点,也许是一个库,或者一个可以做类似事情的简单单线。

标签: linuxbashsh

解决方案


推荐阅读