バッシュでタイムスタンプ比較を実行するための最良の方法は何ですか
スパム行為を防ごうとしているアラートスクリプトがあるので、アラートが過去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
(ありがとう、スティーブ。)