[PHP] Bestand 'not writable' - waarom?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 20:03
Ik heb een script dat gebruik maakt van een queueing bestand; werking: ik schiet een commando in, dat komt in de queue terecht, en een ander script haalt dat eruit en past de queue-file aan.

Om te voorkomen dat de queue-file ongeldig bewerkt wordt door twee gelijktijdige processen, zet ik met flock() een lock op het bestand bij schrijven, en haal dat er wanneer ik klaar ben weer vanaf. Om te voorkomen dat het script de mist in gaat omdat er niet naar de queue-file geschreven kan worden, breekt het script af als de functie is_writable false teruggeeft.

Dit werkt allemaal goed, maar ik wil natuurlijk dat het script zo vaak mogelijk wél doorgang vindt. Daarom probeer ik het eerst een aantal keer, in de hoop dat het bestand toch writable wordt:

PHP:
1
2
3
4
5
6
7
8
9
10
$max_retry   = 20;
$retry_count = 0;
while (($retry_count++ < $max_retry) && !is_writeable($spool))
{
    $this->log(E_INFO, $this->thread, 'could not write to '.$spool.'; trying again ('.$retry_count.')');
    clearstatcache();
    usleep(200000);
}
if (!is_writeable($spool))
    $this->log(E_FATAL, $this->thread, 'could definitely not write to '.$spool);


In een periode van 4 seconde wordt dus 20 keer gekeken of de status alweer OK is. Meestal gaat dit goed, maar wanneer het drukker wordt krijg ik steeds vaker dat hij echt doorgaat tot 20 keer, en dan alsnog afbreekt. Dit terwijl het bestand op dat moment niet echt beschreven wordt!

Ik heb het idee dat ik iets over het hoofd zie waardoor een bestand onbeschrijfbaar kan worden; ik ga er op dit moment vanuit dat dat alleen het geval kan zijn als een ander script daarin aan het schrijven is en het bestand nog niet gesloten heeft. Zijn er meer redenen waarom dit het geval kan zijn en die ik niet weet, waardoor dit probleem veroorzaakt wordt?

Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
Als het een windows platform is, is het omdat er op dat ogenblik in geschreven wordt.

Copy.com


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Windows of linux server?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 20:03
Excuses: PHP 4.4.2 op een Linux-server
En ik weet zeker dat er niet actief in geschreven wordt.

De enige reden die ik kan verzinnen is dat het bestand niet correct afgesloten wordt, maar daar ga ik niet vanuit. Mocht dit de enige oorzaak van een dergelijke fout kunnen zijn dan zal ik alle fclose's gaan debuggen, maar dat heb ik eerder om een andere reden gedaan en daar kwam niets fouts uit naar voren.

[ Voor 82% gewijzigd door sjroorda op 22-09-2006 14:18 ]