1x per dag
Stel ik wil een aantal zaken in mijn cms-systeem 1x per dag laten uitvoeren... is dan de beste manier om dit via een cronjob te doen? Het liefste zou ik geen cronjob gebruiken, zodat ik mijn cms-systeem ook kan gebruiken op een server die geen cronjobs ondersteunt.
Is er een slimme manier waarop je een aantal zaken 1x per dag kunt laten uitvoeren?
Ik kan me voorstellen dat je in de database de datum opslaat waarop de dagelijkse wijzigingen zijn uitgevoerd. En dan zou je telkens als iemand de site aanroept moeten controleren of de datum verschillend is, zo ja dan de dagelijkse zaken uitvoeren en de datum weer opslaan. Of is er een slimmere manier?
Je zou het kunnen checken per request. Maar je zit met het probleem als er op een dag niemand je site bezoekt.
Maar wat ik me afvraag is of er nog een andere manier is? Of moet je echt bij elk request de datum in de database gaan checken?
Je kunt toch ook dit verwerken in de class welke je cache maakt?
Ik zou met cache opruiming dit doen bij een request en dan kijken of er niet nog een cache opruiming is geweest deze dag. Waarom ? Nou als er niemand online is geweest die dag is er ook geen cache / activiteit op je website. Waarom zou je dat dan deleten als het er toch niet is.
Ik zou het gewoon via een cron doen. Ik kan geen enkele hosting opnoemen die cronjobs niet ondersteund?
@jordi: dat zou kunnen, maar dat betekent volgens mij nog steeds dat bij iedere pagina request gecontroleerd moet worden
@Niels: oké, dat wist ik niet. Maar ik heb nooit met cronjobs gewerkt en dan moet je dat telkens voor ieder project instellen. Wat dat betreft zou het wel handig zijn als het standaard in het framework is geintegreerd. Maar stel dat je inderdaad die controle bij iedere request uitvoert, kan dit dan "kwaad"? Gaat bijvoorbeeld je performance erop achteruit? Of hoef ik daar niet echt bang voor te zijn?
Nou dat ligt aan het aantal cache files. En ja, inderdaad moet je bij elk project een cronjob instellen, maar wat geeft dat?
Ik zou gewoon een cron maken die de cache directory doorloopt, en aan de hand van de aamaakdatum/tijd van de file de files verwijderd..
Niels
Niels Kieviet op 19/11/2011 16:44:46:
Hoi Ozzie,
Nou dat ligt aan het aantal cache files. En ja, inderdaad moet je bij elk project een cronjob instellen, maar wat geeft dat?
Ik zou gewoon een cron maken die de cache directory doorloopt, en aan de hand van de aamaakdatum/tijd van de file de files verwijderd..
Niels
Nou dat ligt aan het aantal cache files. En ja, inderdaad moet je bij elk project een cronjob instellen, maar wat geeft dat?
Ik zou gewoon een cron maken die de cache directory doorloopt, en aan de hand van de aamaakdatum/tijd van de file de files verwijderd..
Niels
Niels, ik had dan in gedachten om per request alleen 1 timestamp te controleren. Misschien zelfs wel 1x per sesie. Als de huidige datum gelijk is aan de datum in de databse dan doe je niks. Als de datum ongelijk is dan ga je alle dagelijkse handelingen uitvoeren. is dat een idee? Er hoeft dan maar 1 database veld controle plaats te vinden.
Tja het kan wel.. Maar waarom wil je zo moeilijk doen als het gewoon simpel met een cron kan? Nu moet je extra controles bouwen terwijl je daar met een cron gewoon vanaf bent.
En als een host geen cron ondersteund moet je, jezelf dan niet afvragen of het wel een goede host is?
Niels
Ook zit ik wel eens in een situatie dat ik zelf niet bij de serverinstellingen kan dus dat maakt het allemaal en stukje lastiger. Vandaar dat ik het wel prettig zou vinden als ik niet perse aan cron gebonden ben...
Google maar eens op `Hoe werkt cronjob`. Dan krijg je genoeg resultaten ;-)
Mmm, tja misschien moet je dan toch je idee iets uitwerken en per request gaan controleren of er files zijn die opgeruimd moeten worden.
Niels
Maar mijn idee is dus (globaal) dit:
- Check 1x per sessie de huidige datum.
- Datum gelijk aan datum in database dan niks doen.
- Datum ongelijk aan datum in database dan de bewerkingen uitvoeren en de datum in de database wijzigen naar de huidige datum.
Wat vind je daarvan? Goed idee? Ben ik nog iets vergeten?
Ozzie PHP op 19/11/2011 17:03:49:
Niels, zal ik doen.
Maar mijn idee is dus (globaal) dit:
- Check 1x per sessie de huidige datum.
- Datum gelijk aan datum in database dan niks doen.
- Datum ongelijk aan datum in database dan de bewerkingen uitvoeren en de datum in de database wijzigen naar de huidige datum.
Wat vind je daarvan? Goed idee? Ben ik nog iets vergeten?
Maar mijn idee is dus (globaal) dit:
- Check 1x per sessie de huidige datum.
- Datum gelijk aan datum in database dan niks doen.
- Datum ongelijk aan datum in database dan de bewerkingen uitvoeren en de datum in de database wijzigen naar de huidige datum.
Wat vind je daarvan? Goed idee? Ben ik nog iets vergeten?
Ik zal het anders oplossen. Ik neem aan dat je alle bezoekers sowieso opslaat in de database; dan kun je toch checken of het de eerste bezoeker is van die dag, dat kost je echt geen performance. Desnoods schrijf je daarna in een settings tabel weg dat de cache voor vandaag al geleegd is, dan hoeft hij dat ook niet meer te controleren.
Als het de eerste bezoeker is? Dan de hele cache map leeg donderen.
Hoe controleer je of iemand de 1e bezoeker is en wat is het verschil om te controleren of het de 1e bezoeker van de dag is met mijn idee? Je moet dan toch nog steeds bij elke bezoeker iets controleren? Wat is het verschil / voordeel dan precies ten opzichte wat ik voorstelde? (datum controleren)
Ozzie PHP op 19/11/2011 19:40:40:
Hoe controleer je of iemand de 1e bezoeker is en wat is het verschil om te controleren of het de 1e bezoeker van de dag is met mijn idee? Je moet dan toch nog steeds bij elke bezoeker iets controleren? Wat is het verschil / voordeel dan precies ten opzichte wat ik voorstelde? (datum controleren)
Denk er maar eens over na! ;-)
Dat heb ik gedaan maar ik weet het antwoord niet... dus vertel...
Niels Kieviet op 19/11/2011 14:58:10:
Ik zou het gewoon via een cron doen. Ik kan geen enkele hosting opnoemen die cronjobs niet ondersteund?
Mijndomein.nl ondersteund geen cronjobs.
Of zou hij het zelf soms ook niet weten ;-)
Quote:
Ik neem aan dat je alle bezoekers sowieso opslaat in de database
En als je dat niet doet? Wat heeft het voor nut om alle bezoekers op te slaan?
@Ozzie,
Lees het verhaal van hem nog eens? Hij bedoeld, alle bezoekers staan in een bepaalde tabel, wanneer er deze dag nog geen records in de database zijn gezet is dat dus je eerste bezoeker.. Aan de hand daarvan de cache legen.
@nick,
Ik had het over een echte hosting .. ;-)
Ten eerste sla ik (denk ik) niet alle bezoekers op, maar wat bedoel jij met:
"Hij bedoeld, alle bezoekers staan in een bepaalde tabel, wanneer er deze dag nog geen records in de database zijn gezet is dat dus je eerste bezoeker.."
Dan moet je toch nog steeds bij iedere aanroep gaan controleren of iemand de 1e bezoeker is?? Ik geloof dat ik iets mis nu, maar ik heb geen idee wat dat is???