Ich habe ein Alert-Skript, dass ich versuche, mich zu spammen, also möchte ich eine Bedingung setzen, dass, wenn eine Warnung innerhalb gesendet wurde, sage die letzte Stunde , um keinen weiteren Alarm zu senden. Jetzt habe ich einen Cron-Job, der den Zustand jede Minute überprüft, weil ich schnell benachrichtigt werden muss, wenn die Bedingung erfüllt ist, aber ich muss die E-Mail nicht jede Minute abrufen, bis ich das Problem unter Kontrolle habe. Was ist der beste Weg, Zeit in bash zu vergleichen, um dies zu erreichen?Was ist der beste Weg zur Zeitstempelvergleich in Bash
Antwort
Bei weitem ist die einfachste Zeitstempel als Änderungszeiten von Dummy zu speichern Dateien. GNU touch
und date
Befehle können diese Zeiten setzen/abrufen und Datumsberechnungen durchführen. Bash hat Tests, um zu überprüfen, ob eine Datei neuer als (-nt
) oder älter als (-ot
) eine andere Datei ist.
Zum Beispiel sendet nur eine Benachrichtigung, wenn die letzte Meldung war mehr als eine Stunde vor:
touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
#send notification...
touch last_notification
fi
Use „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 „test“ verwenden.
Danke, ich war der -nt Bit nicht bewusst. Ich könnte eine Datei erstellen, wenn die Warnung zuerst ausgelöst wird, und sie löschen, wenn die Bedingung wiederhergestellt wird (in diesem Fall könnte ich einfach nach Existenz suchen). Irgendeine Idee, wie ich das 'wenn es mindestens eine Stunde war, die Alarmstufe erneut auslösen' umsetzen könnte? – Ichorus
Ich glaube @Bruno hat das beantwortet. – JesperE
Verwenden Sie den Befehl date, um die zwei Zeiten in ein Standardformat zu konvertieren und subtrahieren Sie sie. Sie wollen wahrscheinlich die vorherige Ausführungszeit in einem dotfile speichern dann so etwas wie: (. Danke, Steve)
last = cat /tmp/.lastrun
curr = date '+%s'
diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
# ...
fi
echo "$curr" >/tmp/.lastrun
Warum nicht nur Sekunden seit der Epoche (% s) verwenden? 3600 Sekunden in einer Stunde. –
Weil, obwohl ich dachte, dass diese Option existierte, habe ich es immer wieder übersehen ... –
Ich mag diese Methode, es ist nicht von neueren Version Bash abhängig. Und busybox könnte das tun. –
- 1. bash - Was ist der beste Weg, um Ergebnisse zu zählen?
- 2. Was ist der beste Weg
- 3. Was ist der beste Weg zur Validierung mit anderen Kultur
- 4. Was ist der beste Weg zur Umstellung auf MVC-Codierung?
- 5. Was ist der beste Weg zu
- 6. was der beste Weg
- 7. Der beste Weg zur Benutzeranmeldung in Swift
- 8. Der beste Weg zur zentralen SqlConnection
- 9. Was ist der beste Weg zur Strukturierung der Hierarchie von Ansichten in ASP.NET MVC?
- 10. Was ist der beste Weg zu überprüfen, ob eine Anwendung in bash läuft?
- 11. Was ist der beste Weg, Perl-Code zu dokumentieren?
- 12. Was ist der beste Weg, mehrere Datenbankverbindungen in C#
- 13. Was ist der beste Weg, HTML in Excel zu konvertieren
- 14. Was ist der beste Weg, um ein Zählerfeld in MySQL
- 15. Was ist der beste Weg, Ränge in MYSQL zu generieren?
- 16. Was ist der beste Weg ein Zeitintervall in PHP hinzuzufügen?
- 17. Was ist der beste Weg, über ein Array in scala
- 18. Dynamische Felder in JSP: Was ist der beste Weg?
- 19. Was ist der beste Weg, um XLS-Datei in PHP
- 20. Was ist der beste Weg, Daten in Mongo zu validieren?
- 21. Was ist der beste Weg, um in C++ zu casten?
- 22. Was ist der beste Weg, remote.origin.url in Git zu ersetzen?
- 23. Was ist der beste Weg, Programme in Windows zu vergleichen?
- 24. Was ist der beste Weg, HTML in Python zu verarbeiten?
- 25. Was ist der beste Weg, EventDispatcher in EntityRepository zu injizieren?
- 26. Was ist der beste Weg, Strukturdefinition in C und Golang
- 27. Was ist der beste Weg, Domino Objekte in Java Beans
- 28. Was ist der beste Weg, Python Datetime in rethinkdb einzufügen?
- 29. Was ist der beste Weg, QUERY_STRING in PHP zu verwalten?
- 30. Was ist der beste Weg, Konfigurationsvariablen in PHP zu speichern?
Hinweis: Ich fand -nt nicht funktioniert, es sei denn, es gibt mindestens 1 Sekunde Unterschied zwischen den Zeitstempeln. Um zu testen, ob eine Datei "neu" war, habe ich sie mit einer temporären Datei verglichen, die ich "berührt" habe. Ich habe einen "Schlaf 1" hinzugefügt, um dieses Problem zu beheben. Es scheint, dass dieser Vergleich tatsächlich der einfachste Weg ist, aber wenn Sie meinen Schlafvorschlag nicht mögen, möchten Sie vielleicht einen genaueren Datum/Zeit-Vergleich, je nach Ihren Bedürfnissen. – BuvinJ