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
Antwort
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.
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
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
diese 1-2 x pro Monat gefragt wird. Hast du nichts gefunden, was dir helfen könnte? Viel Glück. – shellter