Schrift
[thread]737[/thread]

Kann es sein,daß ein Webserver kein flock() kennt? (Seite 2)



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
ptk
 2006-05-27 23:01
#7774 #7774
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Das Programm "lockfile" könnte dir helfen. In der Manpage steht:
Code: (dl )
1
2
MISCELLANEOUS
Lockfile is NFS-resistant and eight-bit clean.

lockfile ist im mail/procmail-Port dabei. Vielleicht ist es schon installiert, vielleicht ist dein Admin so nett...
ptk
 2006-05-27 23:02
#7775 #7775
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=betterworld,27.05.2006, 19:59]Wie viele Web-Server gibt es denn? Wenn es immer derselbe Server ist, auf dem das Script laeuft und Du darauf Dauerprozesse laufen lassen darfst, koenntest Du vielleicht mit Shared Memory oder Semaphoren (gibt es das ueberhaupt auf FreeBSD) arbeiten.[/quote]
Ja. Obwohl die Implementierung von SysV-IPC unter BSD bestimmt nicht supertoll geworden ist.
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);
betterworld
 2006-05-29 13:02
#7777 #7777
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Ich habe schwach in Erinnerung, dass O_EXCL auch nicht NFS-sicher ist...
Fatso Keratso
 2006-05-29 14:17
#7778 #7778
User since
2006-03-27
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
mmhhhh, ich befürchte, das stimmt. Habs gerade ausprobiert. Ich lade gleich alle, die sich die HP angucken wollen zu mir nach Hause ein. Da funktioniert's wenigstens...

Gibt es eine Möglichkeit, herauszufinden, ob mein Script mehr als einmal läuft (Liste der Prozess ID's mit gleichem Namen, oder so was)? Vielleicht kann ich mit einer gespeicherten ProzessID in der Lockdatei (dann halt nicht exclusive, wär aber schöner gewesen) vergleichen und dafür sorgen, daß Prozesse weiterlaufen können, obwohl der Prozess, der das Lock angelegt hat unerwartet gekillt wurde.

Im schlimmsten Falle wäre es eine Möglichkeit den kompletten Prozess zu blockieren, bis der erste Prozess beendet ist.

Quote
Du darauf Dauerprozesse laufen lassen darfst

Maximale Laufzeit eines Scripts beträgt 15 Sekunden. Wird also auch nichts

Das mit dem /tmp-Verzeichnis kläre ich noch mal mit meinem Webspace-Provider ab.

Vielen Dank und beste Grüße
Benjamin
betterworld
 2006-05-30 20:40
#7779 #7779
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Fatso Keratso,29.05.2006, 12:17]Gibt es eine Möglichkeit, herauszufinden, ob mein Script mehr als einmal läuft (Liste der Prozess ID's mit gleichem Namen, oder so was)?[/quote]
Du sagtest doch, dass die Scripte auf mehreren Servern laufen. Daher gibt es diese Moeglichkeit wohl nicht. Auch das mit /tmp faellt dann wohl flach.
ptk
 2006-05-31 00:48
#7780 #7780
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Du könntest auch eine Datenbank zum Locken missbrauchen.
Fatso Keratso
 2006-06-01 11:50
#7781 #7781
User since
2006-03-27
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich habe noch nie mit MySQL gearbeitet. Ich werde mich da mal etwas reinfuchsen. Wenn die gelockt werden kann, wäre das sicher eine Möglichkeit. Danke
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2006-05-25 17:50.