Schrift
[thread]737[/thread]

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



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Fatso Keratso
 2006-05-25 17:50
#7764 #7764
User since
2006-03-27
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

ich habe auf meinem Heimrechner (unter MacOS X -> sprich UNIX) ein CGI-Programm getestet, was auch hervorragend funktioniert. Nun habe ich es auf dem Webserver (FreeBSD) getestet und finde heraus, daß der die Filelocks ignoriert (Programm wurde unterbrochen -> flock(FILE, LOCK_EX) or die ("geht nicht")). Ich habe auch überprüft, ob ein Script auf eine Datei zugreifen kann, während ein anderes Script die Datei für 10 Sekunden offenhält. Ergebnis: Es kann!

Kann das sein? Kann ich da irgendwas machen? Kennt irgend jemand dieses Problem?

Vielen Dank im Voraus
Benjamin\n\n

<!--EDIT|Fatso Keratso|1148565067-->
bloonix
 2006-05-25 18:55
#7765 #7765
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo Benjamin,

[quote=Fatso Keratso,25.05.2006, 15:50](Programm wurde unterbrochen -> flock(FILE, LOCK_EX) or die ("geht nicht"))[/quote]

"geht nicht" ist natürlich eine sehr aussagekräftige Fehlermeldung :)

Kennst du die $! Variable? Vielleicht darf der User, unter dem der
Webserver läuft, die Datei nicht locken, weil die nötigen Rechte dafür
fehlen! Bitte verwende $!, um den genauen Fehler herauszufinden!

Gruß,
opi\n\n

<!--EDIT|opi|1148568998-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
Fatso Keratso
 2006-05-25 19:03
#7766 #7766
User since
2006-03-27
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
Na ja, das ist jetzt kein Quelltext aus meinem Originalprogramm :) Der Wert von $! ist übrigens "Operation not supported", sorry habe ich wohl vergessen dazu zu schreiben.

Könnte ich irgendwas bei dem Rechte-Problem machen, wenn es das ist (außer natürlich bei der Firma anklopfen, die mir den Webspace zur Verfügung stellt)?

Gruß
Benjamin
Ishka
 2006-05-25 19:17
#7767 #7767
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Wenn dein Server ein Netzwerk-Dateisystem hat, funktionieren flocks nicht. Das liegt dann aber nicht am Server, sondern am Dateisystem.
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
betterworld
 2006-05-25 19:30
#7768 #7768
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
[quote=Ishka,25.05.2006, 17:17]Wenn dein Server ein Netzwerk-Dateisystem hat, funktionieren flocks nicht. Das liegt dann aber nicht am Server, sondern am Dateisystem.[/quote]
Anscheinend doch, wenn man rpc.lockd startet. Steht jedenfalls aufhttp://www.freebsd.de/archive....9.html, auffindbar ueber google -> flock freebsd "operation not supported"

Das muss man dann wohl mal dem Admin sagen, dass er den starten soll.
Fatso Keratso
 2006-05-25 19:35
#7769 #7769
User since
2006-03-27
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
Und wie finde ich das heraus? Ich kenn mich da nicht so aus. Ich erreiche meinen Webspace via FTP und habe dort ein cgi-bin. Wie der Server eigentlich läuft, weiß ich nicht. Hier ist mal ein Link, wo es noch ein paar Infos zur Umgebung gibt. Ich kenne nicht alles, was da so steht, aber ihr könnt da sicher mehr mit anfangen: http://web04.bytecamp.net/cgi-bin/tellme.pl?diag.

Wenn das Dateisystem jetzt das Problem ist, gibt es sonst eine Möglichkeit, etwas mit dem gleichen Effekt zu tun, oder muß ich mir dann selber was einfallen lassen?

Vielen Dank schon mal
Benjamin
Fatso Keratso
 2006-05-25 19:52
#7770 #7770
User since
2006-03-27
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=betterworld,25.05.2006, 17:30]Anscheinend doch, wenn man rpc.lockd startet.  Steht jedenfalls aufhttp://www.freebsd.de/archive....9.html, auffindbar ueber google -> flock freebsd "operation not supported"

Das muss man dann wohl mal dem Admin sagen, dass er den starten soll.[/quote]
Ich beginne langsam einen Schimmer zu bekommen, was da vor sich geht. Bin ja nicht sicher, was der Admin da für mich bereit ist zu tun, aber ich werde da mal hin schreiben.

Vielen Dank soweit
Benjamin
Fatso Keratso
 2006-05-26 20:45
#7771 #7771
User since
2006-03-27
18 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hallo,

Habe heute Antwort erhalten. flock() ist tatsächlich nicht implementiert :( . Hier mal ein Auszug us dem Antwortschreiben meines Providers:

das Problem ist uns bekannt.
Leider ermoeglicht das von uns verwendete Bestriebsystem FreeBSD
File Locking mit dem rpc.lockd nur von Serverseite aus.
Daher kann ein Webserver aus dem Verbund auch kein File Locking.

Wir hoffen, dass das bald geloest wird, ich bin da aber nicht sehr
zuversichtlich. Schade, ich haette Ihnen gern geholfen.


Ich weiß jetzt noch nicht so recht, wie ich mein Problem jetzt lösen soll. Ich werde wohl eine Art High-Level-Lock als Workaround schreiben, mir fehlt bisher aber noch der Ansatz, wie man das sicher umsetzen kann.

Vielen Dank soweit für eure Hilfe.

Gruß
Benjamin
GwenDragon
 2006-05-27 16:36
#7772 #7772
User since
2005-01-17
14533 Artikel
Admin1
[Homepage]
user image
betterworld
 2006-05-27 21:59
#7773 #7773
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
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.

Oder vielleicht gibt es weitere Dateisysteme wie /tmp, in denen Locks moeglich sind? Dabei muss man aber sehr vorsichtig arbeiten, denn in /tmp kann jeder schreiben, und man darf sich z. B. nicht darauf verlassen, dass ein Dateiname wie "/tmp/lockkeratso" nicht von einem anderen Benutzer belegt ist. Am besten sollte man sich in /tmp ein Verzeichnis mit einem zufaelligen Namen und chmod 700 erstellen und im Home-Verzeichnis einen Symlink darauf anlegen. Wenn in man dieses Verzeichnis dann mit chdir wechselt und mit stat('.') noch mal schnell ueberprueft, ob es immer noch die richtigen UID/Masks hat und mit Cwd ueberprueft, ob man auch wirklich dadrin ist oder ob es ein Symlink auf ein anderes Verzeichnis war, sollte man darin ziemlich sicher Lockfiles anlegen koennen.
Dann muss man nur noch ueberlegen, ob /tmp bei einem Neustart oder nach einem gewissen Zeitraum automatisch geloescht wird und was man dann macht.\n\n

<!--EDIT|betterworld|1148753509-->
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



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