2016-10-31 3 views
0

Ich bin neu in Linux Bash-Skript und Lernen. Ich frage mich nur, ob es möglich ist, stderr nur dann in eine Datei umzuleiten, wenn der stderr ERROR enthält.Linux Bash Skript Redirect nur wenn das Protokoll enthält Fehler

Ich führe Hadoop Hive-Befehle aus, die ich in eine Bash-Skriptdatei lege, um den Prozess zu planen. Der Hive-Befehl generiert eine Menge von Protokollen, und ich möchte die Protokolle nicht jedes Mal in eine Datei umleiten. Wenn das Protokoll jedoch Fehler enthält, möchte ich das Protokoll in eine Datei umleiten und die Fehlerdatei an E-Mail senden jemand.

Bitte lassen Sie mich wissen, wie dies zu erreichen ist. Vielen Dank im Voraus ..

Grüße, Jeeva

+0

Mögliche Duplikate von [wie stderr, und nicht stdout pipe?] (Http://stackoverflow.com/questions/2342826/how-to-pipe-stderr-and-not-stdout) –

+1

@AlexL. Wie beantwortet das die Frage? Er möchte, dass die Umleitung vom Inhalt abhängig ist. – Barmar

+0

diese Frage beschreibt, wie stderr speziell durch grep .. pipe.so Jee sollte grep für 'ERROR' –

Antwort

0

Sie haben die stderr Dateideskriptor zu verwenden, die 2

Zum Beispiel:

rm this-file-does-not-exist.txt 
>>>> rm: cannot remove ‘asdfasf.js’: No such file or directory 
# to redirect that error to a file you do this 
rm this-file-does-not-exist.txt 2>/tmp/logError.txt 
cat /tmp/logError.txt 
>>>> rm: cannot remove ‘asdfasf.js’: No such file or directory 
# if you want to check if the output contains `ERROR` do this 
badcommand | grep "ERROR" 1>/tmp/logError.txt # if greping for "ERROR" was successfull redirect stdout to /tmp/logError.txt 
# the 1 is a file descriptor for stdout 

How to use linux mail command

+1

Wie macht dies die Umleitung abhängig davon, ob die Ausgabe' ERROR' enthält? – Barmar

+0

Ich habe die Frage falsch gelesen. Ich habe es gerade bearbeitet –

2

Wenn ich verstehe, Wenn ein Fehler auftritt, möchten Sie das gesamte Fehlerprotokoll in einer Datei (einschließlich Zeilen, die möglicherweise nicht mit Ihrem Fehlererkennungsmuster übereinstimmen.). Ich glaube nicht, dass es eine Möglichkeit gibt, was Sie wollen rein durch I/O-Umleitung.

Stattdessen können Sie stderr unbedingt in eine eigene Datei umleiten. Dann, als ein Post-Processing-Schritt, können Sie durch diese Datei grep, um zu sehen, ob Fehler angezeigt wird, und je nach Ergebnis, mailen Sie die Datei an jemanden, oder löschen Sie es.

+0

Ich denke, Ihre Interpretation macht Sinn. Python/Ruby könnte helfen. –