我有一个简单的 bash 脚本,它运行一系列检查(ping
、nslookup
等),然后发送包含该数据输出的电子邮件报告。
我希望电子邮件中包含有关整个脚本运行所需时间的信息。有没有一种简单的方法来收集这些信息?
答案1
我建议看一下bash
变量SECONDS
:
秒:每次引用此参数时,返回自 shell 调用以来的秒数。如果将值分配给 SECONDS,则后续引用时返回的值是自分配以来的秒数加上所分配的值。
因此,您可以简单地在脚本末尾打印该变量。或者,如果您的目的是仅测量程序的一部分的时间,则只需SECONDS=0
在测量的命令块的开头进行设置,最后仅使用存储在该变量中的值。
答案2
在命令前加上前缀/usr/bin/time
,time 命令将输出脚本运行所花费的时间。这比使用bash
特定的东西更便携。
答案3
使用SECONDS
and时time
会给你相对值。如果您希望获得关于脚本运行时间和完成时间的审核和报告目的的绝对值,您可能需要在命令之前和之后尝试类似的操作
date '+%Y%m%d%H%M%S.%N'
。这还可以为您提供更好的粒度,因为它可以捕获亚秒级差异,因为您拥有ping
通常在一秒钟内执行的命令。
答案4
嵌套您的脚本。要发送电子邮件,有多种选项。我个人更喜欢 msmtp ,您可以自己定义标头“此处”样式(内联)或使用单独的文件并将它们放在一起。有各种各样的替代方案,包括 perl、python 等。
Reply-To: someone@somehost
Sender: someone <someone@somehost>
To: [email protected]
Subject: some subject
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/html; charset="iso-8859-1"
尾随空白行很重要。将您组装的消息cat到msmtp中:
cat assembled.eml | msmtp [email protected]
悲观主义者会循环合理的次数直到成功。
有效负载也可以是 html,也可以是 php 生成的。
对于隔夜“批量”操作来说,一个非常丑陋的替代方案是创建一个 cronjob,并通过电子邮件发送输出来代替 stdout/stderr。