Mehrfacher Schreibzugriff auf Dateien

12/11/2009 - 17:21 von Norbert Hahn | Report spam
Hallo,

derzeit gibt es auf meinem Rechner ein paar Programme, die über die
bash auf zwei Log-Dateien schreiben, etwa in der Art

echo "some text" | tee -a log1 >> log2

Nun möchte ich ein weiteres Programm (in Perl geschrieben) laufen
lassen, das konkurrierend ebenfalls Sàtze in diese Dateien schreibt.

Wàhrend dieser Zeit sind auch Programme mit Lesen der Log-Dateien zu-
gange, z.B. tail -f log1

Besteht da eine Unfallgefahr?
Wie lange wartet z.B. die Bash, wenn die Dateien von Perl zum Fort-
schreiben offen sind?

Norbert
 

Lesen sie die antworten

#1 Marcel Müller
12/11/2009 - 17:42 | Warnen spam
Hallo,

Norbert Hahn wrote:
echo "some text" | tee -a log1 >> log2

Nun möchte ich ein weiteres Programm (in Perl geschrieben) laufen
lassen, das konkurrierend ebenfalls Sàtze in diese Dateien schreibt.

Wàhrend dieser Zeit sind auch Programme mit Lesen der Log-Dateien zu-
gange, z.B. tail -f log1

Besteht da eine Unfallgefahr?



Jein, es kommt darauf an, wie viele dieser Zugriffe erfolgen, und vor
allem, wie lange die Dateien offen bleiben.

Ob es überhaupt eine Lock-Situation gibt, hàngt allerdings vom
Share-Mode ab (S_... Konstanten). Meist wird die Datei unter Unix
einfach zweimal zum schreiben geöffnet. Alles weitere hàngt dann von den
Anwendungen ab.
Wenn die Append-Zugriffe nicht atomar sind, gibt es Hackfleisch im
Dateinhalt. Technisch gesehen sind Appends nicht notwendigerweise
atomar. Eigentlich bedarf es einer externen Synchronisation über IPC
oder explizite Dateisperren. Da die Situation aber recht hàufig
vorkommt, verhalten sich die Linux-Kernels bei kleineren Log-Eintràgen
meist eher gutmütig.
Wenn man es wirklich ordentlich machen will, landet man ziemlich schnell
bei einem Logging-Dienst a la syslogd. Denn hat man das Problem mit dem
schreiben gelöst, bleiben immer noch die Probleme mit der Reorganisation
der Logs ab einer bestimmten Größe zum Beispiel. Sinnvollerweise sollten
nàmlich alle Schreibenden Anwendungen gleichzeitig das Logfile wechseln.


Wie lange wartet z.B. die Bash, wenn die Dateien von Perl zum Fort-
schreiben offen sind?



Bash wartet gar nicht. Wenn überhaupt dann wartet der Kernel bzw. der
Dateisystemtreiber. Keine Ahnung, wie Linux sich da verhàlt. Ich würde
jedenfalls nicht darauf bauen.


Marcel

Ähnliche fragen