Frage

Ich habe eine Warnung Skript, das ich von Spamming mich zu halten versuche, so würde Ich mag einen Zustand versetzen, dass, wenn ein Alarm innerhalb der letzten Stunde sagen gesendet wurde, nicht einen weiteren Alarm zu senden. Jetzt habe ich einen cron-Job, den die Bedingung jede Minute überprüft, weil ich schnell alarmiert werden müssen, wenn die Bedingung erfüllt ist, aber ich brauche nicht die E-Mail jeden munite zu bekommen, bis ich das Problem unter Kontrolle zu bekommen. Was ist der beste Weg, um Zeit in bash vergleichen dies zu erreichen?

War es hilfreich?

Lösung

Bei weitem ist die einfachste Zeitstempel als Änderungszeiten von Dummy-Dateien zu speichern. GNU touch und date Befehle können diese Zeiten einstellen / bekommen und Datumsberechnungen durchzuführen. Bash hat Tests zu überprüfen, ob eine Datei neuer ist als (-nt) oder älter als (-ot) eine andere.

Zum Beispiel, um nur eine Benachrichtigung zu senden, wenn die letzte Meldung ist mehr als eine Stunde vor:

touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
    #send notification...
    touch last_notification
fi

Andere Tipps

Verwenden Sie "test":

if test file1 -nt file2; then
   # file1 is newer than file2
fi

EDIT:. Wenn Sie wissen möchten, wann ein Ereignis aufgetreten ist, können Sie „touch“ verwenden, um eine Datei zu erstellen, die Sie später vergleichen können mit „test“

Mit dem Befehl date, die zwei Mal in ein Standardformat konvertieren, und sie subtrahiert. Sie wollen wahrscheinlich die vorherige Ausführungszeit in einem dotfile speichern dann so etwas wie:

last = cat /tmp/.lastrun
curr = date '+%s'

diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
    # ...
fi

echo "$curr" >/tmp/.lastrun

(Danke, Steve.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top