質問
私は、スパムを送信しないようにするアラートスクリプトを持っているので、たとえば過去1時間以内にアラートが送信された場合、別のアラートを送信しないという条件を設定します。条件が満たされたらすぐにアラートを出す必要があるため、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
他のヒント
" test"を使用:
if test file1 -nt file2; then
# file1 is newer than file2
fi
編集:イベントがいつ発生したかを知りたい場合は、「タッチ」を使用できます。後で" test"を使用して比較できるファイルを作成します。
dateコマンドを使用して、2つの時間を標準形式に変換し、減算します。以前の実行時間をドットファイルに保存してから、次のようなことをしたいと思うでしょう:
last = cat /tmp/.lastrun
curr = date '+%s'
diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
# ...
fi
echo "$curr" >/tmp/.lastrun
(ありがとう、スティーブ)
所属していません StackOverflow