スパム行為を防ごうとしているアラートスクリプトがあるので、アラートが過去1時間以内に送信された場合に、別のアラートを送信しないように条件を設定します。条件が満たされるとすぐにアラートを受け取る必要があるため、問題を制御するまでメールを受け取る必要がないため、毎分条件をチェックするcronジョブがあります。これを達成するためにbashで時間を比較する最良の方法は何ですか?
はるかに簡単なのは、ダミーファイルの変更時刻としてタイムスタンプを保存することです。 GNU touch
およびdate
コマンドは、これらの時間を設定/取得し、日付計算を実行できます。Bashには、ファイルが(-nt
)または(-ot
)より古い。
たとえば、最後の通知が1時間以上前の場合にのみ通知を送信するには:
touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
#send notification...
touch last_notification
fi
「テスト」を使用:
if test file1 -nt file2; then
# file1 is newer than file2
fi
編集:イベントがいつ発生したかを知りたい場合は、「touch」を使用してファイルを作成し、後で「test」を使用して比較できます。
Dateコマンドを使用して、2つの時間を標準形式に変換し、それらを減算します。おそらく、以前の実行時間をドットファイルに保存して、次のようなことをしたいと思うでしょう:
last = cat /tmp/.lastrun
curr = date '+%s'
diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
# ...
fi
echo "$curr" >/tmp/.lastrun
(ありがとう、スティーブ。)