Re: redirection

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Fri, 7 Jan 2005 10:54:17 +0100 (CET)

Manfred Lotz <manfred.lotz(at)web.de> wrote:
> Ich leite in einem Script output um in eine Datei (appending),z.B.
>
> echo "one important line: $somevar" >> /somepath/mylog 2>&1

Das "2>&1" solltest Du besser weglassen.

> Was passiert, wenn das Script von mehreren zur gleichen Zeit aufgerufen
> wird. Wird das Anhängen an die Datei irgendwie serialisiert oder kann da
> Output verloren gehen?

Output geht mit Sicherheit nicht verloren (das garantiert
das Flag O_APPEND, das beim Anhängen mit ">>" verwendet
wird).

Die Frage ist nur, ob die Ausgaben durcheinander kommen
können, oder ob jede ausgegebene Zeile auch eine eigene
Zeile in der Logdatei bleibt. Wenn die Zeilen, die Du mit
echo ausgibst, kürzer sind als die Default-stdio-Buffer-
größe, dann klappt es, weil der Schreibzugriff dann ein
einzelnes, atomares write(2) ist, anderenfalls besteht die
Möglichkeit, daß Zeilen gemischt werden.

Die Buffer-Größe wiederum richtet sich nach dem Dateisy-
stem, auf dem sich die Datei befindet, in die Du schreibst.
Bei FreeBSD's UFS ist das per Default 8 Kbyte. Wenn Du da-
gegen in eine Pipe schreibst, ist der Default 1 Kbyte (wie-
derum bei FreeBSD; bei anderen Systemen kann die Größe an-
ders sein). Das ist auch der Grund, warum folgende beiden
Kommandos sich unterschiedlich verhalten können:
   $ echo "$BLABLABLA" >> foo
   $ echo "$BLABLABLA" | cat >> foo
Man sollte immer besser ersteres machen (ohne cat) wegen
des größeren Buffers. Außerdem spart es einen überflüssi-
gen Prozeß, einen überflüssigen Filedescriptor und eine
überflüssige Pipe, die die ganzen Daten noch mindestens
zweimal (überflüssig) herumkopiert.

Langer Rede kurzer Sinn: Wenn Deine Zeilen hinreichend
kurz sind, gibt es keine Probleme.

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
"I invented Ctrl-Alt-Delete, but Bill Gates made it famous."
        -- David Bradley, original IBM PC design team
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 07 Jan 2005 - 10:54:59 CET

search this site