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
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
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
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.