スクリプトの実行にかかる時間を測定し、生成された電子メールに含めるにはどうすればよいですか?

スクリプトの実行にかかる時間を測定し、生成された電子メールに含めるにはどうすればよいですか?

一連のスキャン(など)を実行し、そのデータの出力を含む電子メールレポートを送信する単純なbashスクリプトがpingありますnslookup

スクリプト全体を実行するのにかかる時間に関する情報を電子メールに含めたいと思います。この情報を収集する簡単な方法はありますか?

答え1

bash変数を調べることをお勧めしますSECONDS

第二:このパラメータが参照されるたびにシェルが呼び出されてからの秒数を返します。値がSECONDSに割り当てられている場合、後続の参照によって返される値は、割り当て後の秒数に割り当てられた値を加算した値です。

したがって、スクリプトの最後に変数を簡単に印刷できます。あるいは、プログラムの一部の時間だけを測定することが目的の場合は、SECONDS=0それを測定するコマンドブロックの先頭に設定し、最後にその変数に格納された値を使用するだけです。

答え2

command プレフィックス付きの/usr/bin/timetime コマンドは、スクリプトの実行に要した時間を出力します。これはbash、特定のものを使用するよりも移植性が優れています。

答え3

SECONDSと を使用すると、time相対値が提供されます。スクリプトが実行され完了するのにかかる時間の監査と報告目的の絶対値を取得するには、コマンドの前後にこのようなことを試すことができます date '+%Y%m%d%H%M%S.%N'。また、ping通常は1秒以内に実行されるコマンドがあるため、1秒未満の違いをキャッチして、より良い粒度を提供します。

答え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"

末尾の空行が重要です。組み立てられたメッセージをmsmtpに分類します。

cat assembled.eml | msmtp [email protected]

悲観主義者は、成功するまで合理的な回数だけ繰り返します。

ペイロードはHTMLでもPHPでも生成できます。

夜間の「バッチ」操作の非常に見苦しい代替方法は、cronjobを生成し、stdout / stderrの代わりに出力を電子メールで送信することです。

関連情報