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

699
NewsGuy

Ein Prozess in einem Bash-Skript, das ich gerade entwickle, schlägt im Hintergrund fehl (er läuft ohne Fehlercode weiter, schreibt jedoch den Fehler in seine Protokolldatei).

Sobald der Fehler in der Protokolldatei angezeigt wird, möchte ich den Prozess neu starten (und auch die Überwachung der Protokolldatei wird fortgesetzt). Wenn der Prozess abgeschlossen ist, möchte ich, dass der Rest des Skripts ausgeführt wird.

Ich habe viel gesucht und viele Dinge mit Grep und Tail ausprobiert, und zwar Pipes etc., 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 
0

2 Antworten auf die Frage

0
Antony T.

Ihr 'If' -Befehl prüft, ob buchstäblich die Wörter "Fehlertext" die Protokolldatei sind. Nicht ganz sicher der Versuch dort ... Ich würde jedoch Regex verwenden:

if grep -x 'ErrorText' "$File"; then KILL error_prone_process GOTO START fi 
GOTO existiert nicht in bash, das war nur ein Beispiel für etwas, von dem ich nicht weiß, wie ich es richtig machen soll (damit sich der Codeblock selbst wiederholt). Grep reicht auch nicht aus, da dies die gesamte Protokolldatei und nicht nur die neuesten Zeilen grep. Tail und Grep zusammen funktionieren zwar, aber ich weiß nicht, wie ich das in einem sich wiederholenden Codeblock implementieren würde. Regex ist auch nicht notwendig, nur ein regulärer grep würde für den Textanpassungsteil ausreichen. Danke trotzdem für die Antwort. NewsGuy vor 8 Jahren 0
Können Sie Ihren ursprünglichen Beitrag so bearbeiten, dass er Ihren tatsächlichen Code-Versuch und möglicherweise einen Ausschnitt aus Ihrem Fehlerprotokoll enthält? Es ist mehrdeutig und Sie möchten eine bestimmte Antwort. Schreiben Sie dieses Logfile? Wenn ja, wenn Sie die Zeilennummerierung hinzufügen, ist dies möglicherweise einfacher Antony T. vor 8 Jahren 0
0
le_top

Wenn Sie Zugriff auf die Systemkonfiguration haben, sollten Sie monit in Betracht ziehen . Zur Überwachung von Protokollen muss monit ein Skript ausführen, das das Protokoll überprüft und in eine andere Datei OK oder FEHLER schreibt. Ich überprüfe dann diese Datei auf Dateilänge und -frische.

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, wenn das Skript gerade läuft. NewsGuy vor 8 Jahren 0