Ik zit hier met een uitdaging: ik wil een database gestuurde cron-deamon bouwen. Ik vraag me alleen af óf dat verstandig is om zelf te bouwen óf dat het al bestaat (niet gevonden via google)
In het kort wil ik het volgende realiseren:
- er zijn meerdere triggers voor jobs
Er kunnen dus meerdere jobs tegelijk aan de deamon en onafhankelijk van elkaar worden ge-queued
- er moeten jobs ge-queued kunnen worden.
Doordat er meerdere jobs tegelijk zouden moeten kunnen draaien waarvan er één later een te queuen job in de weg zit moet het dus een soort wachtrij ondersteunen, de jobs moeten immers wel uitgevoerd worden
- jobs moeten naast elkaar uitgevoerd kunnen worden of expliciet opvolgend ivm afhankelijkheid
Er zouden jobs kunnen zijn die níet tegelijk mogen draaien ivm afhankelijkheden
Dat betekent dat er dus een aantal zaken zijn om rekening mee te houden:
- er moet één proces andere php processen op kunnen starten, monitoren en eventueel opvolgen
- taken kunnen bestaan uit het uitvoeren van een script op een bepaalde locatie of het uitvoeren van specifieke code
- een taak kan eenmalig of herhalend zijn
- de maximale looptijd van een taak kan eventueel overruled worden door een taak zelf (doordat deze de set_timeout() aanpast
Dit alles leidt tot een scheiding van functies die allen autonoom naast elkaar werken:
- een harvester
Dit is een proces wat de tabel `cronTab` uitleest en omzet naar `cronJob`
- een deaemon
Het voortuderend lopende proces die de `cronJob` tabel uitleest, verwerkt en eventueel processen start voor de verwerking van de jobs. Hier zit vrij weinig intelligentie in: de vertaalslag van definitie naar taak is al door de harvester uitgevoerd
- een worker
Deze spreekt eigenlijk voor zich. Dit zijn feitelijk de uitvoerende processen die door de daemon worden gestart. Deze voeren de code uit of `executen` de scripts zoals gedefinieerd in de `cronJob`.
Mijn vraag is eigenlijk: is dit wel verstandig? Doe ik er wel goed aan om een wiel (crontab) opnieuw uit te vinden?
grootste voordeel is denk ik dat dit vervolgens ook op windows / unix omgevingen hetzelfde werkt... ?
grootste nadeel is dat het wiel opnieuw uitvinden nu niet altijd het beste resultaat levert...
Any suggestions?
In het kort wil ik het volgende realiseren:
- er zijn meerdere triggers voor jobs
Er kunnen dus meerdere jobs tegelijk aan de deamon en onafhankelijk van elkaar worden ge-queued
- er moeten jobs ge-queued kunnen worden.
Doordat er meerdere jobs tegelijk zouden moeten kunnen draaien waarvan er één later een te queuen job in de weg zit moet het dus een soort wachtrij ondersteunen, de jobs moeten immers wel uitgevoerd worden
- jobs moeten naast elkaar uitgevoerd kunnen worden of expliciet opvolgend ivm afhankelijkheid
Er zouden jobs kunnen zijn die níet tegelijk mogen draaien ivm afhankelijkheden
Dat betekent dat er dus een aantal zaken zijn om rekening mee te houden:
- er moet één proces andere php processen op kunnen starten, monitoren en eventueel opvolgen
- taken kunnen bestaan uit het uitvoeren van een script op een bepaalde locatie of het uitvoeren van specifieke code
- een taak kan eenmalig of herhalend zijn
- de maximale looptijd van een taak kan eventueel overruled worden door een taak zelf (doordat deze de set_timeout() aanpast
Dit alles leidt tot een scheiding van functies die allen autonoom naast elkaar werken:
- een harvester
Dit is een proces wat de tabel `cronTab` uitleest en omzet naar `cronJob`
- een deaemon
Het voortuderend lopende proces die de `cronJob` tabel uitleest, verwerkt en eventueel processen start voor de verwerking van de jobs. Hier zit vrij weinig intelligentie in: de vertaalslag van definitie naar taak is al door de harvester uitgevoerd
- een worker
Deze spreekt eigenlijk voor zich. Dit zijn feitelijk de uitvoerende processen die door de daemon worden gestart. Deze voeren de code uit of `executen` de scripts zoals gedefinieerd in de `cronJob`.
Mijn vraag is eigenlijk: is dit wel verstandig? Doe ik er wel goed aan om een wiel (crontab) opnieuw uit te vinden?
grootste voordeel is denk ik dat dit vervolgens ook op windows / unix omgevingen hetzelfde werkt... ?
grootste nadeel is dat het wiel opnieuw uitvinden nu niet altijd het beste resultaat levert...
Any suggestions?
Gekkie is a proud member of TheBenny!