一連のチェック(ping
、nslookup
など)を実行し、そのデータの出力を含む電子メールレポートを送信する単純なbashスクリプトがあります。
スクリプト全体の実行にかかった時間に関する情報をメールに含めたいです。その情報を収集する簡単な方法はありますか?
bash
変数SECONDS
を見てみることをお勧めします。
[〜#〜] seconds [〜#〜]:このパラメーターが参照されるたびに、シェルの呼び出し以降の秒数が返されます。値がSECONDSに割り当てられている場合、以降の参照で返される値は、割り当てからの秒数と割り当てられた値です。
したがって、この変数をスクリプトの最後に出力するだけです。または、プログラムの一部のみの時間を測定する場合は、SECONDS=0
は、測定されたコマンドブロックの先頭で、最後にこの変数に格納されている値を使用します。
コマンドの前に/usr/bin/time
を付けます。timeコマンドは、スクリプトの実行にかかった時間を出力します。これはbash
固有のものを使用するよりも移植性があります。
SECONDS
とtime
を使用すると、相対値が得られます。スクリプトがいつ実行され、いつ完了したかについて、監査とレポートの目的の絶対値が必要な場合は、コマンドdate '+%Y%m%d%H%M%S.%N'
の前後で、このようなことを試してください。また、通常は1秒以内に実行されるping
のようなコマンドがあるため、1秒未満の違いをキャプチャできるため、粒度が向上します。
スクリプトをネストします。メールを送信するには、いくつかのオプションがあります。私は個人的には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します。
cat assembled.eml | msmtp [email protected]
悲観論者は、成功するまで合理的な回数ループします。
ペイロードはhtmlにすることも、phpで生成することもできます。
夜間の「バッチリ」操作の非常に醜い代替手段は、cronジョブを作成することであり、出力はstdout/stderrの代わりに電子メールで送信されます。