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


11

私は一連のチェック(走る、簡単なbashスクリプト持っているpingnslookupなど)をし、そのデータの出力と電子メールレポートを送信します。

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

回答:


15

bash変数を見てみましょうSECONDS

SECONDS:このパラメーターが参照されるたびに、シェルの呼び出しからの秒数が返されます。値がSECONDSに割り当てられている場合、以降の参照で返される値は、割り当て以降の秒数と割り当てられた値です。

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


私は知りませんでした$SECONDS。それは素晴らしいことです!これに追加するには、次のような形式で秒を時間:分:秒に変換できますdate -d "1970-01-01 ${SECONDS} sec" +'%k:%M:%S'man dateより多くのフォーマットオプションについてはを参照してください)。
スパーホーク2015

私はこのアプローチが本当に好きですが、私はまだ少し混乱しています。同じスクリプトを数秒間隔で実行するとします。SECONDS=0あるスクリプトを別のスクリプトで同じように設定すると、それらは互いに干渉しますか?
マイクB

3
Nevermind- 本質的に違いを差し引いたスタックオーバーフローの投稿(stackoverflow.com/a/5153036/344780)でトムのフィードバックに遭遇しましたSTART_TIME=$SECONDS; dosomething; ELAPSED_TIME=$(($SECONDS - $START_TIME))。同時に使用する場合は、これは少し柔軟に見えます。
マイクB

8

コマンドのプレフィックスを付ける/usr/bin/timeと、timeコマンドがスクリプトの実行にかかった時間を出力します。これは、bash特定のものを使用するよりも移植性があります。


6

を使用SECONDSしている間、time相対値が表示されます。スクリプトがいつ実行され、いつ完了したかについて、監査とレポートの目的の絶対値が必要な場合は、コマンドの前後でこのようなことを試してください date '+%Y%m%d%H%M%S.%N'。これにより、ping通常1秒以内に実行されるようなコマンドがあるため、1秒未満の違いをキャプチャできるため、粒度が向上します。


1

スクリプトをネストします。メールを送信するには、いくつかのオプションがあります。私は個人的にはmsmtpを好みます。自分で「ここ」のスタイル(インライン)でヘッダーを定義するか、別のファイルを使用してそれらをまとめることができます。これには、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します。

cat assembled.eml | msmtp somebody@somewhere.else

悲観論者は合理的な回数成功するまでループします。

ペイロードはhtmlにすることも、phpで生成することもできます。

夜間の「バッチリ」操作の非常に醜い代替手段は、cronジョブを作成することであり、出力はstdout / stderrの代わりに電子メールで送信されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.