Ich habe ein Verzeichnis mit Absturzprotokollen und möchte eine bedingte Anweisung in einem Bash-Skript verwenden, das auf einem find-Befehl basiert.
Die Protokolldateien werden in folgendem Format gespeichert:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
Ich möchte, dass die if-Anweisung nur dann true zurückgibt, wenn ein Absturzprotokoll für eine bestimmte App vorhanden ist, das in den letzten 5 Minuten geändert wurde. Der find
Befehl, den ich verwenden würde, ist:
find /var/log/crashes -name app-\*\.log -mmin -5
Ich bin mir nicht sicher, wie ich das if
richtig in eine Aussage einbauen soll . Ich denke, das könnte funktionieren:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
Es gibt einige Bereiche, in denen ich unklar bin:
- Ich habe mir die if-Flags angesehen , bin mir aber nicht sicher, welche ich verwenden soll.
- Benötige ich die
test
Direktive oder sollte ich nur direkt mit den Ergebnissen des Befehls find verfahren oderfind... | wc -l
stattdessen eine Zeilenzählung durchführen? - Nicht zu 100% notwendig, um diese Frage zu beantworten, sondern
test
zum Testen von Rückgabecodes, die von Befehlen zurückgegeben werden? Und sie sind irgendwie unsichtbar - außerhalb vonstdout
/stderr
? Ich habe dieman
Seite gelesen , bin mir aber immer noch ziemlich unklar, wann ich sie verwendentest
und wie ich sie debuggen soll.
... -exec command ';' -quit
, aber ich glaube nicht, dass es für Letzteres eine andere Lösung gibt, als das Ergebnis zu analysieren. Außerdem tritt in beiden Fällen das Hauptproblem beim Analysieren des Ergebnisses von find
(dh der Unfähigkeit, Trennzeichen von Zeichen in Dateinamen zu unterscheiden) nicht auf, da in diesen Fällen keine Trennzeichen gefunden werden müssen.
find ... -exec
. Siehe auch die Beispielbefehle unter Warum wird die Ausgabe von find nicht ordnungsgemäß wiederholt?