Bashでタイムスタンプ比較を実行する最良の方法は何ですか

StackOverflow https://stackoverflow.com/questions/205666

  •  03-07-2019
  •  | 
  •  

質問

私は、スパムを送信しないようにするアラートスクリプトを持っているので、たとえば過去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

(ありがとう、スティーブ)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top