Thread Kann es sein,daß ein Webserver kein flock() kennt? (17 answers)
Opened by Fatso Keratso at 2006-05-25 17:50

Fatso Keratso
 2006-05-29 12:18
#7776 #7776
User since
2006-03-27
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
Vielen Dank für die Ideen!

Also mein erster Ansatz war jetzt etwas in der Richtung. Ist nur ein Beispiel-Code, noch nichts fertiges. einfach zweimal starten. Nur habe ich noch ein Problem. Was ist, wenn mein Prozess aus irgendeinem Grund gekillt wird. Wie werde ich dann die Datei wieder los, so daß andere Prozesse wieder laufen können?

Inwiefern ist das mit dem /tmp besser? Das Prinzip ist mir klar, aber wo liegt der Vorteil dieser Variante?

@GwenDragon: Danke für die Links. file:///FLock benutzt dieselbe flock() Funktion, die auf meinem Server nicht implementiert ist, aber LockFile-Simple basiert auf der gleichen Idee, die ich auch habe.

Mit den Webservern ist das so eine Sache. Also, so wie ich das mal mitbekommen habe, läuft diesselbe Seite auf mehreren Servern gleichzeitig, um den Ausfall eines einzelnen abzufangen. Als Benutzer habe ich das bisher nicht mitbekommen. Habe einen FTP-Account und die Datendateien die ich im CGI-Script anlege sind auch so, wie sie sein sollen (außer natürlich die Datenverluste, die ich wegen des fehlenden flocks() habe).

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#! /user/bin/perl -w

use strict;
use Fcntl qw/:DEFAULT :flock/;

my $filename = "/test.lock";

if (sysopen(FH, $filename, O_RDWR | O_CREAT | O_EXCL)) {
print "Process locked.\n";
sleep(10);
}
else {
print "Waiting for lock.\n";
while (!sysopen(FH, $filename, O_RDWR | O_CREAT | O_EXCL)) {};
print "Got the lock.\n";
}

unlink($filename);
close(FH);

View full thread Kann es sein,daß ein Webserver kein flock() kennt?