2012-03-29 7 views
1

Dies ist ein Cron-Job, und die Ausgabe an STDERR führt zu einer E-Mail-Benachrichtigung über einen Fehler, den ich brauche. Die Fehler können jedoch nicht-fatal sein, daher benötige ich auch die STDERR-Ausgabe, die im Protokoll mit STDOUT enthalten ist. Wie?Bash brauchen STDOUT + STDERR im Log, und STDERR zum normalen Ziel

+2

diese 1-2 x pro Monat gefragt wird. Hast du nichts gefunden, was dir helfen könnte? Viel Glück. – shellter

Antwort

1

OK, ich habe ein paar Minuten damit verbracht, herauszufinden, wie man das nur mit der Standard-Shell-Kommandozeile macht.

Bereiten Sie sich auf eine lächerliche Befehlszeile vor.

((./your-script 3>&1 1>&2 2>&3 3>&- | tee /dev/fd/2) 3>&1 1>&2 2>&3 3>&-) | 
    cat >logfile 

Das einzige, was ich über diese Gräuel sagen kann, ist, dass es funktioniert ... und ich kann nichts einfacher, die auch funktioniert finden. Oh, und es erfordert nicht bash oder irgendetwas. Es funktioniert in Standard Bourne Shell.

Ich habe keine Ahnung, warum es am Ende | cat sein muss, aber es funktioniert nicht ohne es.

+0

Das Hinzufügen von 'cat' am Ende ändert den Zeilenpufferungsmodus, sodass Sie die Ausgabe früher sehen (vielleicht), aber ich würde erwarten, dass sie am Ende alle gleich ist. – ams

0

Der folgende Befehl funktioniert mit weniger Zeichen:

((./your-script 3>&1 1>&2 2>&3- | tee /dev/fd/2) 3>&1 1>&2 2>&3-) | cat > logfile