Überwachen Sie das Protokoll live auf Fehler. Wenn error = Befehl erneut ausführen und die Protokollüberwachung neu starten, wenn nicht gefunden = Überwachung für immer fortsetzen

0

Ein Prozess in einem Bash-Skript, das ich entwickle, schlägt häufig leise fehl (es wird weiterhin ohne Fehlercode ausgeführt, aber der Fehler wird in die Protokolldatei geschrieben).

Sobald der Fehler in der Protokolldatei auftritt, möchte ich den Prozess neu starten (und auch die Überwachung der Protokolldatei fortsetzen). Wenn der Prozess abgeschlossen ist, soll der Rest des Skripts ausgeführt werden.

Ich habe viel gesucht und viele Dinge mit Grep und Tail ausprobiert, und wenn, während, Pipes usw., aber ich kann es einfach nicht zum Laufen bringen.

Was ist der richtige Weg?

Folgendes möchte ich grundsätzlich in einer imaginären Sprache (nicht bash / shell):

:START
RUN error_prone_process
IF "Error text" ~/logfile.txt
   KILL error_prone_process
   GOTO START
NewsGuy
quelle

Antworten:

0

Ihr 'If'-Befehl prüft, ob die Worte "Fehlertext" die Protokolldatei sind. Ich bin mir nicht ganz sicher, ob der Versuch da ist ... Ich würde Regex verwenden:

if grep -x 'ErrorText' "$File"; then
   KILL error_prone_process
   GOTO START
fi
Antony T.
quelle
GOTO existiert nicht in bash, das war nur ein Beispiel für etwas, von dem ich nicht weiß, wie man es richtig macht (damit sich der Codeblock wiederholt). Grep ist auch nicht genug, da dies grep für die gesamte Protokolldatei ausführen würde, nicht nur für die neuesten Zeilen. Die Kombination von Tail und Grep mag funktionieren, aber ich habe keine Ahnung, wie ich das in einem sich selbst wiederholenden Codeblock implementieren würde. Regex ist auch nicht notwendig, nur ein reguläres Grep würde für den Text-Matching-Teil ausreichen. Danke trotzdem für die Antwort.
NewsGuy
Können Sie Ihren ursprünglichen Beitrag so bearbeiten, dass er Ihren tatsächlichen Codeversuch und möglicherweise einen Ausschnitt aus Ihrem Fehlerprotokoll enthält? Es ist ziemlich vieldeutig und Sie möchten eine spezifische Antwort. Schreiben Sie diese Protokolldatei benutzerdefiniert? Wenn ja, wenn Sie Zeilennummerierung hinzufügen, könnte es einfach machen
Antony T.
0

Wenn Sie Zugriff auf die Systemkonfiguration haben, ziehen Sie die Verwendung von monit in Betracht . Um Protokolle zu überwachen, muss ich ein Skript ausführen, das das Protokoll überprüft und OK oder ERROR in eine andere Datei schreibt. Ich überprüfe dann diese Datei auf Dateilänge und Frische.

le_top
quelle
Danke, aber ich möchte, dass dieses Skript relativ portabel ist. Einfache Dinge wie diese sollten keine externe Abhängigkeit erfordern. Ich möchte die Protokolldatei nicht rund um die Uhr überwachen, nur wenn das Skript ausgeführt wird.
NewsGuy