[PHP & Unix] Grote cronjobs 'verspreiden' over tijd

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een grote site met een grote MySQL database en veel bezoekers. Ik laat elke minuut cronjobs uitvoeren (met crontab van Unix) die informatie uit de database in HTML bestanden opslaan, die vervolgens door de bezoekers geladen worden of geïncludeerd worden in PHP. Nu zijn deze cronjobs aardig groot waardoor mijn CPU elke hele minuut erg wordt belast. Is er een manier om de cronjobs te verspreiden over de minuut zodat de CPU niet elke hele minuut op '0% CPU vrij' staat of heeft er iemand een betere oplossing? Bedankt.

[ Voor 4% gewijzigd door Verwijderd op 26-05-2003 19:59 ]


Acties:
  • 0 Henk 'm!

  • Emmeau
  • Registratie: Mei 2003
  • Niet online

Emmeau

All your UNIX are belong to us

Hmm, draai ze onafhankelijk iedere 5 minuten?

If you choose to criticise you choose your enemies


Acties:
  • 0 Henk 'm!

  • Mithrandir
  • Registratie: Januari 2001
  • Laatst online: 13-09 21:40
Waarom heb je in godsnaam elke minuut een cronjob nodig? Heb je dan niet iets fout gedaan in het design van je website?

Ik kan me geen situatie indenken waarbij je elke minuut een cronjob moet doen :?

Verbouwing


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik update bijvoorbeeld de statistieken pagina met de online bezoekers en leden (dat zijn er meestal zo'n 150 in totaal) elke minuut.

Acties:
  • 0 Henk 'm!

  • Emmeau
  • Registratie: Mei 2003
  • Niet online

Emmeau

All your UNIX are belong to us

Waarom doe je dat niet 1 keer per uur?

Lijkt me meer dan genoeg voor wat statistieken.

En mocht je ze echt iedere keer live aan willen bieden, doe dit dan ook live, en zet een php/asp whatever page inelkaar die on the fly en on demand de html genereert.

Beetje onzinnig dat je cpu 59 keer per uur voor niks pagina's staat te generen.

If you choose to criticise you choose your enemies


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Emmeau schreef op 27 May 2003 @ 08:11:
Waarom doe je dat niet 1 keer per uur?

Lijkt me meer dan genoeg voor wat statistieken.

En mocht je ze echt iedere keer live aan willen bieden, doe dit dan ook live, en zet een php/asp whatever page inelkaar die on the fly en on demand de html genereert.

Beetje onzinnig dat je cpu 59 keer per uur voor niks pagina's staat te generen.
je kan dan beter die pagina creeren met een scriptje op het moment dat die nodig is en ouder is dan 1 minuut, dan bereik je hetzelfde als je nu hebt ale er vaker per minuut die pagina wordt opgevraagd.

Acties:
  • 0 Henk 'm!

Verwijderd

met een
PHP:
1
<? sleep(10); ?>
??

[ Voor 30% gewijzigd door Verwijderd op 27-05-2003 08:44 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik heb zelf het probleem ook gehad met spreiden van cronjobs, wegens performance problemen.

Ik heb het opgelost door een extra scriptje te schrijven, die de oude cronjobs start.
Dan kan na elkaar en ze kunnen getriggerd worden naar een bepaalde tijd.

Ik kan helaas nu niet op de server kijken voor het scriptje, maar het werkte igg met exec commando's en wat loopjes en sleepjes.

Ik denk me nog te herinneren dat iets van dit was:
code:
1
exec("nohup ./mijnscriptje $par1 $par2  >/dev/null &");

Dit start een nieuw proces naast het uitvoerende script.

Als je die nohup en de & weg laat, dat wacht het script totdat het uitgevoerde commando is uitgevoerd.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ik zou het niet doen zoals jij het voorstelt bojo. Want dan heb je exact hetzelfde probleem weer :)

Je start de jobs allemaal in dezelfde cronjob en laat ze vervolgens tegelijk gestart worden...


Wat denk ik handiger is, is om idd een script te schrijven. Maar dan eentje die bijvoorbeeld in /var/run of ergens in /tmp een filetje met zijn eigen pid erin schrijft en die verwijdert nadat ie klaar is.
Het script start dan gewoon alle jobs "in zijn voorgrond" (dus geen & gebruiken enzo) waardoor ie wacht tot de job klaar is.

Je laat dan elke minuut je 'start script' starten, maar controleert daarin eerst of het 'pid-bestandje' er nog wel is en het process met dat pid nog bestaat, zoja -> exit want er is nog een script bezig en je wilt er geen twee tegelijk. (evt laat je jezelf mailen dat er nog een script liep)
Zonee -> maak het filetje aan of wijzig het en doe je werk.

Hiermee spreid je het nog niet echt over de minuut, maar zorg je er wel voor dat er niet meerdere jobs tegelijk actief zijn en/of meerdere keren dezelfde jobs actief kunnen zijn.
Pagina: 1