[PHP] Geen flock in combinatie met NFS

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Omdat er geen access log beschikbaar is en ik toch graag wil weten hoe vaak mijn script uitgevoerd wordt, heb ik zelf wat log code geschreven:
PHP:
1
2
3
4
5
$f = fopen("/home/groups/x/xc/xccu/data/xcl/access log.txt", "a");
flock($f, LOCK_EX);
fwrite($f, sprintf("%s\t%s\t%s %s\n", $_SERVER["REMOTE_ADDR"], gmdate("H:i:s d-M-Y"), $_SERVER["REQUEST_METHOD"], $_SERVER["REQUEST_URI"]));
flock($f, LOCK_UN);
fclose($f);

In de log kom ik echter regels tegen als:
code:
1
2
204.30.143.176  20:34:40 21-Sep-2003    GET /xcl/?lid=ra2_yr&pname=sludgekil&pur204204.30.143.176       20:34:41 21-Sep-2003    GET /xcl/?lid=ra2_yr&pname=stuff681&pure82.37.88.154        20:34:41 21-Sep-2003    GET /xcl/?lid=ra2_yr&pname=kl3pt0&pure=
204.30.143.176  20:34:42 21-Sep-2003    GET /xcl/?lid=ra2_yr&pname=jamie4446&pure=

Het werkt dus niet. Vanaf PHP 4.2 is dio_fcntl beschikbaar, maar ik moet het doen met 4.1. Is er nog een andere optie?

Acties:
  • 0 Henk 'm!

Verwijderd

flock is inderdaad niet beschikbaar op NFS, FAT en nog wat filesystems.

Je zou kunnen werken met een externe lock file:

- check of lockfile bestaat
zo ja log == locked
zo nee maak lockfile aan
- schrijf rustig in je log
- verwijder lockfile

[ Voor 3% gewijzigd door Verwijderd op 22-09-2003 12:12 . Reden: typo's ]


Acties:
  • 0 Henk 'm!

Verwijderd

- check of lockfile bestaat
zo ja log == locked
zo nee maak lockfile aan
- schrijf rustig in je log
- verwijder lockfile
Dat gaat niet zomaar goed. Bijv. twee processen constateren tegelijkertijd dat een lockfile nog niet bestaat. Daar kan je wel dingen op gaan verzinnen, maar dat maakt het weer nodeloos ingewikkeld.

Je kan beter een externe lockfile als een externe lockfile gebruiken, dus die al bestaat en waar je op flock'ed.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Verwijderd schreef op 22 september 2003 @ 12:44:
Dat gaat niet zomaar goed. Bijv. twee processen constateren tegelijkertijd dat een lockfile nog niet bestaat. Daar kan je wel dingen op gaan verzinnen, maar dat maakt het weer nodeloos ingewikkeld.

Je kan beter een externe lockfile als een externe lockfile gebruiken, dus die al bestaat en waar je op flock'ed.
Maar flock werkt niet, dus jouw idee werkt toch ook niet?

Acties:
  • 0 Henk 'm!

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Ik bedoelde dan de externe lock file op een non-NFS filesystem neerzetten. Of wordt de lockfile door verschillende computers benaderd, want dat veranderd de zaak...

In dat geval, kan je dan niet gewoon syslog gebruiken?

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Acties:
  • 0 Henk 'm!

  • klinz
  • Registratie: Maart 2002
  • Laatst online: 17-09 15:24

klinz

weet van NIETS

dio_fcntl() gaat je trouwens ook niet helpen. NFS en locken is nooit een goede combinatie geweest.

Je kunt wel gebruik maken van semaforen.

Merk op dat dit niet echt de handigste manier is van naar een logfile schrijven. Elke pagina moet immers wachten tot alle voorgaande pagina's klaar zijn met schrijven.

[ Voor 4% gewijzigd door klinz op 22-09-2003 20:30 ]


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Infinitive schreef op 22 September 2003 @ 19:44:
Ik bedoelde dan de externe lock file op een non-NFS filesystem neerzetten. Of wordt de lockfile door verschillende computers benaderd, want dat veranderd de zaak...

In dat geval, kan je dan niet gewoon syslog gebruiken?
Ja, er zijn ongeveer zes http servers. Ik ben geen admin, dus syslog is geen optie.

Acties:
  • 0 Henk 'm!

  • klinz
  • Registratie: Maart 2002
  • Laatst online: 17-09 15:24

klinz

weet van NIETS

Loggen in een database is geen optie? Of anders de logfiles per server wegschrijven en later mergen?

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
klinz schreef op 22 september 2003 @ 23:10:
Loggen in een database is geen optie? Of anders de logfiles per server wegschrijven en later mergen?
Nee, ik wilde juist loggen omdat ik connection issues heb met de db. Ik heb ook geen toegang tot per server storage space.

Maar zelfs SMB ondersteund locking, voor NFS moet toch ook iets beschikbaar zijn?
Pagina: 1