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 findBefehl, den ich verwenden würde, ist:
find /var/log/crashes -name app-\*\.log -mmin -5
Ich bin mir nicht sicher, wie ich das ifrichtig 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
testDirektive oder sollte ich nur direkt mit den Ergebnissen des Befehls find verfahren oderfind... | wc -lstattdessen eine Zeilenzählung durchführen? - Nicht zu 100% notwendig, um diese Frage zu beantworten, sondern
testzum Testen von Rückgabecodes, die von Befehlen zurückgegeben werden? Und sie sind irgendwie unsichtbar - außerhalb vonstdout/stderr? Ich habe diemanSeite gelesen , bin mir aber immer noch ziemlich unklar, wann ich sie verwendentestund 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?