Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]14[/thread]

Problem beim Mitloggen!



<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
skontox
 2003-08-21 11:36
#687 #687
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Guten Morgen!
Ich habe mal eine generelle Frage!
Wenn ich auf einem Server ein Perl-CGI-Script laufen lasse und versuche alle User, die auf die Seite kommen mit deren IP zuerfassen und mitzuloggen. Sprich ein Log-Datei auf dem Server hinterlege, wie kann ich gewährleisten, dass das auch klappt. Ich meine Wenn Z.B zwei User fast gleichzeitig auf die Seite gehen und dort von dem Perl-Script die Log-Datei geöffnet wird. Das kann ja dann nur für einen klappen, denn es kann ja immer nur ein Schreibzugriff zur Zeit auf eine Datei stattfinden!

Wie würdet Ihr das lösen? Oder reglt der Server das intern irgendwie, das ich mich da gar nicht mit beschäftigen brauche?
Sollte man das in einer globalen Variable mitloggen und dann wenn die Logdatei wieder frei ist speichern?

Vielleicht kann mir hier ja mal jemand, der das schon mal berücktsichtig hat einen kleinen Tip geben!

Gruß skontox
snadra
 2003-08-21 12:02
#688 #688
User since
2003-08-11
265 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du könntest flock() zu Hilfe nehmen, aber generell würde ich bei sehr vielen Serverzugriffen einen Db Eintrag empfehlen. Da hast Du mit sowas keine Probleme... Dazu noch eine persistente Verbindung zur DB unter mod_perl, um den Speicher zu schonen...
http://hamburg.pm.org
jeden 2. mittwoch im monat
--
#!/usr/bin/perl -w
$l=join('',map chr,(116,110,105,114,112))if$^T;
!!$$?@_=qw(Jhfg Aabgure Prey Hnpxre):$l=1;
for(@_){eval reverse($l)."'"._(_(_($_))).' \''}
sub _{$_=~y+a-z+n-za-m+and pop}
skontox
 2003-08-21 12:36
#689 #689
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Besten Dank erstmal für Deine Antwort! Werde ich mir mal durch den Kopf gehen lassen!

Gruß skontox
kmonster
 2003-08-21 13:55
#690 #690
User since
2003-08-20
33 Artikel
BenutzerIn
[default_avatar]
hallo,

solange du die datei nicht öffnest sollte es keine schwierigkeiten geben. zwei gleichzeitige schreib zugriffe kann es (denke ich) nicht geben wenn du nur anhängst. zusätzlich flock und du solltest auf der sicheren seite sein. das problem tritt in der regel nur auf wenn ein prozess liest wärend ein anderer noch nicht geschrieben hat und daher die änderungen des ersten prozesses verloren gehen.

Code: (dl )
1
2
3
4
5
open (FILE, '>>dateiname') || die ('Kann die datei nicht öffnen');
flock (FILE,2);
print FILE $daten."\n";
flock (FILE,4);
close (FILE) || die ('Kann die Datei nicht schließen');


gruss volker

Edit by Crian: Code-Tags hinzugefügt\n\n

<!--EDIT|Crian|1061460227-->
Strat
 2003-08-21 14:16
#691 #691
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Nebenbei: wenn du noch ein $! zur Fehlermeldung hinzufuegst, bekommst du noch den Grund fuer das Fehlschlagen der Operation. Und wenn du zusaetzlich die Konstanten von Fcntl verwendest, hast du das ganze sogar plattformunabhaengig (ok, win9x/ME hat noch kein flock):
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use Fcntl qw(:flock);

my &#36filename = "dateiname";
unless (open (FILE, ">> &#36filename")) {
    die ("Kann die datei '&#36filename' nicht öffnen: &#36!\n");
}
else {
    if( flock(FH, LOCK_EX) ){
      print FILE &#36daten."\n";
      close (FILE) or 
        die ("Kann die Datei '&#36filename' nicht schließen: Festplatte voll?: &#36!\n");    
    } # if
    else {
        die "Fehler in flock '&#36filename': &#36!\n";
    }
} # else

Nebenbei: den flock am besten implizit durch das close (FILE); aufheben lassen, weil sonst doch ganz schoen was daneben gehen kann...

<edit>:DEFAULT braucht man fuer dieses beispiel bei Fcntl nicht</edit>\n\n

<!--EDIT|esskar|1061500525-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
skontox
 2003-08-21 18:05
#692 #692
User since
2003-08-06
193 Artikel
BenutzerIn
[default_avatar]
Besten Dank an Euch alle! (-:

Das hat mir auf jeden Fall erstmal weitergeholfen!

Gruß skontox

http://nifi.ramke.net/fischi3.png
kmonster
 2003-08-22 00:24
#693 #693
User since
2003-08-20
33 Artikel
BenutzerIn
[default_avatar]
na so groß sind die unterschiede nicht, ich habs hier nur abgespeckt weil ich schreib faul war. ansonsten komme ich strat schon recht nahe bis auf das ich nicht wusste das man flock nicht selber aufheben muss. (wieder was gelernt)
SirLant
 2003-08-21 22:53
#694 #694
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Start und kmonster haben ja nen total unterschiedlichen Syntax bei der Flock-Funktion, ich benutze den von strat, aber gibts da nen großen Unterschied?
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Strat
 2003-08-22 02:07
#695 #695
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=kmonster,21.08.2003, 22:24]...auf das ich nicht wusste das man flock nicht selber aufheben muss. (wieder was gelernt)[/quote]
flock selber aufzuheben kann sogar gefaehrlich sein, weil erst bei close der Filehandle geflushed wird.
1. programm 1 hebt lock auf und wird vom os in urlaub geschickt
2. programm 2 wird aus dem urlaub geholt, sieht, dass die datei nicht mehr gelockt ist und wurstet froehlich auf der datei rum und wird danach wieder in urlaub geschickt
3. programm 1 kommt nun wieder zurueck, setzt ein close ab, die puffer werden geleert, und die datei ist spaetestens dann hin...\n\n

<!--EDIT|Strat|1061503731-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Dubu
 2003-08-22 08:16
#696 #696
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Strat,22.08.2003, 00<!--emo&:0]flock selber aufzuheben kann sogar gefaehrlich sein, weil erst bei close der Filehandle geflushed wird.
[/quote]
Nicht mehr.
[quote=perldoc -f flock,Perl 5.8.0]To avoid the possibility of miscoordination, Perl now flushes FILEHANDLE before locking or unlocking it.
[/quote]
Aus Gruenden der Abwaertskompatibilitaet wuerde ich mich darauf aber auch nicht verlassen. :-)

Edit: Hmpf. Diese Smiley-Renderei fuer triviale Zeichenkombinationen wird irgendwann auch mal eine Seite endgueltig schrotten...\n\n

<!--EDIT|Dubu|1061526077-->
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2003-08-21 11:36.