FrankS: flock vorhanden, aber Datei schon 2x gelöscht ?

Beitrag lesen

Hallo,

hm...
entweder der flock-Mechanismus ist nicht richtig implementiert auf Deinem WebServer oder es giebt ein weiteres Script, welches sich nicht um ein lock kümmert. flock verhindert nur einen Zugriff wenn es von ALLEN genutzt wird. Ein Script, welches die Datei zum Schreiben öffnet, und danach nicht per flock den "Status" abfragt, überschreibt hemmungslos die Datei.

Eine andere Unsauberkeit enthält Dein Script: Was passiert, wenn das Script quasi gleichzeitig gestartet wird?
[...]

open (FILE,"clicks.txt") or die "Cant open database, please try again: $!\n";
   while (<FILE>)   {
   $file .=  $_;
   }
   close FILE;

[...]

Beide lesen den Inhalt der Datei und "merken" sich den. Beide "arbeiten" weiter, der erste öffnet die Datei zum Schreiben und schreibt, der 2te öffnet auch, bleibt am flock() stehen, bis der erste das lock wieder aufhebt und schreibt dann - Und zwar u.U. genau den gleichen Inhalt! So gehen Die Zähler verloren.

open (FILE,">clicks.txt") or die "Cant save to database : $!\n";
   flock FILE, 2;

[...]

close FILE;

Lösung: Entweder baust Du um Deine Struktur noch mittels Hilfsdatei und flock für diese Datei ein "Lock" 'drumrum oder Du öffnest die Datei gleich zum Lesen und schreiben, Lockst, liest, berechnest den neuen Inhalt, löscht den alten Inhalt, schreibst und schließt dann wieder die Datei.

Gruß Frank

P.S. mir kommt gerade noch 'ne Idee: kann es sein, daß Dein Script - warum auch immer - ab und zu z.B. nach dem Öffnen der Datei zum Schreiben abgeschossen wird?