如何测量我的脚本运行需要多长时间,并将其包含在生成的电子邮件中?


11

我有一个运行一系列检查(一个简单的bash脚本pingnslookup等等),然后用这些数据的输出发送电子邮件报告。

我希望电子邮件中包含有关整个脚本运行多长时间的信息。有没有一种简单的方法来收集该信息?

Answers:


15

我建议看一下bash变量SECONDS

SECONDS:每次引用此参数时,返回自shell调用以来的秒数。如果将值分配给SECONDS,则后续引用返回的值是分配以来的秒数加上分配的值。

因此,您可以简单地在脚本末尾打印此变量。或者,如果您打算只测量程序一部分的时间,则只需SECONDS=0在所测量的命令块的开头进行设置,最后在此变量中使用存储的值即可。


我从来不知道$SECONDS; 那很棒!要添加此内容,您可以使用类似的格式将秒转换为小时:分钟:秒date -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'man date有关更多格式设置,请参阅)。
Sparhawk

我真的很喜欢这种方法,但是我仍然有些困惑。假设我彼此间隔了几秒钟运行同一脚本。如果我SECONDS=0在一个脚本上设置相同的东西,而在另一个脚本上设置相同的东西,它们会互相干扰吗?
Mike B

3
没关系-我在堆栈溢出帖子(stackoverflow.com/a/5153036/344780)上偶然发现了Tom的反馈,该帖子实际上减去了差异START_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME))。这对于同时使用似乎更加灵活。
Mike B

8

给您的命令加上前缀/usr/bin/time,time命令将输出脚本运行所花费的时间。这比使用bash特定的东西更可移植。


6

虽然使用SECONDStime会给你的相对值。如果您希望对脚本的运行时间和完成时间具有绝对的审计和报告目的值,则可能需要在命令之前和之后尝试类似的操作 date '+%Y%m%d%H%M%S.%N'。这还可以为您提供更好的粒度,因为它可以捕获亚秒级的差异,因为您具有类似命令的命令ping,这些命令通常在一秒钟内执行。


1

嵌套您的脚本。要发送电子邮件,有很多选项。我个人比较喜欢msmtp,您可以自己在“ here”样式(内联)中定义标题,也可以使用单独的文件将它们组合在一起。有各种各样的替代方法,包括perl,python等。

Reply-To: someone@somehost
Sender: someone <someone@somehost>
To: somebody@somewhere.else
Subject: some subject
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/html; charset="iso-8859-1"

空行尾很重要。从而将您组装的消息放入msmtp:

cat assembled.eml | msmtp somebody@somewhere.else

悲观者会不断循环直到成功几次。

有效载荷也可以是html,也可以是php生成的。

一夜之间说,“批量”操作的一个非常丑陋的选择是创建一个cronjob,并通过电子邮件发送输出来代替stdout / stderr。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.