0

我试图弄清楚如何确定异常终止(异常终止)的特定作业的相应重新启动时间(作业最终完成之前的最后一次重新启动)。

例如:

  • 作业 ABC 在 5:00 运行
  • Job ABC 在 5:03 异常终止
  • 5点05分重启
  • Job ABC 在 5:08 再次异常终止
  • 5点10分再次重启
  • 作业 ABC 于 5:15 完成

在这个例子中,我可以安全地假设在 5:00 首次运行的 Job ABC 的完成时间是 5:15。我试图通过从它第一次异常停止(5:10 – 5:03 = 7 分钟停机时间)减去它上次重新启动的时间来计算 Job ABC 的停机时间。

这是我为获得第一次失败和最后一次重启时间所做的:

grep abended logfile | head -1   #first failure
grep restarted logfile | tail -1 #last restart

但问题是,如果另一个 Job ABC 在 6:00 运行怎么办?

比方说,

  • 另一个 Job ABC 在 6:00 运行。
  • 它在 6:03 异常终止。
  • 6点05分重启
  • 作业 ABC 于 6:07 完成。

如果是这种情况,我就不能再使用上面所说的头部和尾部了。

如何判断 6:05 的重新启动是否对应于 6:03 首次异常的另一个 Job ABC?

顺便说一句,我正在尝试创建一个自动化工具,它将获得工作的停机时间,我唯一的参考是一个纯文本日志文件,它每 24 小时自动创建一次。

注意:我正在使用 Bash 脚本。

4

1 回答 1

0

猫 tmp.log

Job ABC ran at 5:00

Job ABC abended at 5:03

It was restarted at 5:05

Job ABC abended again at 5:08

I was restarted again at 5:10

Job ABC completed at 5:15

Another Job ABC ran at 6:00.

It abended at 6:03.

It was restarted at 6:05

Job ABC completed at 6:07.

 awk '{if(s==0 && /abended/){s = 1;st = $NF}}{if(s && /restarted/) {et = $NF}}1; /completed/{s=0;print "Downtime of this job was: "et "-" st}' tmp.log

这将给出以下输出:

Job ABC ran at 5:00

Job ABC abended at 5:03

It was restarted at 5:05

Job ABC abended again at 5:08

I was restarted again at 5:10

Job ABC completed at 5:15
Downtime of this job was: 5:10-5:03

Another Job ABC ran at 6:00.

It abended at 6:03.

It was restarted at 6:05

Job ABC completed at 6:07.
Downtime of this job was: 6:05-6:03.
于 2013-05-10T09:45:36.177 回答