[PHP] script herstart zichzelf zonder opdracht *

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • superbikkel
  • Registratie: Juli 2001
  • Laatst online: 13:33
offtopic:
Ik geloof dat ik gek wordt...


Ik heb een PHP script (aangeroepen via chron-job) dat in volgorde 15 databases bijwerkt met info uit XML files. Dit werkte tot gisteren perfect.
(Het is overigens een fors script, in totaal 4000+ regels.)

Gisteren bleek de database onjuiste data te bevatten. Na het doorspitten van de logfile en het nogmaals uitvoeren van het script en wederom de logfile te bekijken bleek dat het script zichzelf herhaalt. Zonder dat er in het script een herhaal opdracht (for/next - while whatever) zit, of dat het zichzelf opnieuw aanroept.

Na 5 uurtjes proberen/testen/iets veranderen/proberen/testen etc werd ik een beetje moedeloos.
Het blijkt dat het script soms al opnieuw start voor het helemaal doorgelopen is, bv midden in een database update stopt ie en begint van voor af aan.

Het enige dat is veranderd is de grootte van de XML files (meer records).

Ik kan maar 3 dingen bedenken die dit veroorzaken:
1: er is door de beheerder van de server een instelling gewijzigd die verband houd met PHP (onwaarschijnlijk)
2: fout in de code (maar dan had het eerst ook niet gewerkt, dus onwaarschijnlijk)
3: ik loop tegen een of andere limiet aan (bv gebruikt/beschikbaar geheugen) waardoor PHP de uitvoering onderbreekt en het script opnieuw start

Nogmaals: script is niet gewijzigd in de afgelopen 3 weken.

Iemand die een oorzaak kan verzinnen want ik zie het niet meer. Dan kan ik dat weer ff testen.

[ Voor 4% gewijzigd door superbikkel op 25-08-2004 11:26 ]


Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 20:38

alienfruit

the alien you never expected

Misschien duurt de job te lang? Dat ie vervolgens een nieuwe job begint :?

Acties:
  • 0 Henk 'm!

  • superbikkel
  • Registratie: Juli 2001
  • Laatst online: 13:33
Ik gebruik settimelimit=0.

En als de job te lang duurt (was eerst een probleem) dan stopt het script gewoon op een willekeurige plek.

Acties:
  • 0 Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
Hoe heb je je cronjob ingesteld? Misschien een te korte tussentijd?

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Acties:
  • 0 Henk 'm!

  • ajhaverkamp
  • Registratie: November 2001
  • Laatst online: 00:21

ajhaverkamp

gewoon Arjan

Dit staat default in de php.ini:
max_execution_time = 30
Een script mag dus 30 seconde lopen, daarom wordt het automatisch afgebroken. Je krijgt dan echter wel een melding in je browser, dat de maximum execution time exceeded is (oid).

This footer is intentionally left blank


Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 19-09 22:18

chem

Reist de wereld rond

Je doet die cronjob toch niet via een browser he?

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • superbikkel
  • Registratie: Juli 2001
  • Laatst online: 13:33
@TRON: Dit script loopt 1x per dag

@ajhaverkamp: los ik op door settimelimit=0 in het script te zetten

@chem: via WGET.

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 20:38

alienfruit

the alien you never expected

wget, je kan toch ook gewoon de CLI versie van php aansturen :?

Acties:
  • 0 Henk 'm!

  • superbikkel
  • Registratie: Juli 2001
  • Laatst online: 13:33
alienfruit schreef op 25 augustus 2004 @ 12:17:
wget, je kan toch ook gewoon de CLI versie van php aansturen :?
Geprobeert maar werkt niet. script loopt dan gewoon niet. Ligt overigens niet aan het script maar aan de server, die voert het gewoon niet uit.

Acties:
  • 0 Henk 'm!

  • superbikkel
  • Registratie: Juli 2001
  • Laatst online: 13:33
Ben d'r uit!!!!

Het komt allemaal door WGET. WGET geeft na 15 minuten een time-out omdat het te lang duurt, en gaat dan opnieuw proberen het script uit te voeren (te downloaden). Dit doet ie 20 keer (default).

Heb de time-out op 0 (oneindig) gezet en het aantal retries op 1 en: HET WERKT.

offtopic:
ben toch niet zo gek als ik dacht

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

superbikkel schreef op 25 augustus 2004 @ 12:19:
[...]


Geprobeert maar werkt niet. script loopt dan gewoon niet. Ligt overigens niet aan het script maar aan de server, die voert het gewoon niet uit.
ehm, ligt er maar aan hoe je hem aanroept ;)
en anders kan je hem altijd nog met /usr/bin/php -q <filename> aanroepen als het andere niet werkt:

PHP:
1
2
3
4
#!/usr/bin/php -q
<?
// script
?>


en uiteraard executable maken (chmod a+x <filename>)

imo moet je dit soort scripts nooit via wget ofzo uitvoeren, onnodige overhead, en een eventuele security risk, omdat het script via de browser gaat (en tevens heeft het script dan niet voordeel van de eventuele extra rechten)

  • superbikkel
  • Registratie: Juli 2001
  • Laatst online: 13:33
Ik wil het ook niet via WGET uitvoeren, maar de diverse manieren om het script via de command line rechtstreeks uit te voeren werken niet.
heb ze allemaal (uh alle twee geloof ik) uitgeprobeerd, maar er gebeurd gewoon niks. Ik denk dat het op de server uitgeschakeld is. (niet mijn server dus)

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

superbikkel schreef op 26 augustus 2004 @ 16:43:
Ik wil het ook niet via WGET uitvoeren, maar de diverse manieren om het script via de command line rechtstreeks uit te voeren werken niet.
heb ze allemaal (uh alle twee geloof ik) uitgeprobeerd, maar er gebeurd gewoon niks. Ik denk dat het op de server uitgeschakeld is. (niet mijn server dus)
krijg je een foutmelding als je het via de command line doet?
Pagina: 1