Geplande taken
Een geplande taak is een opdracht die de server op vaste tijden voor je uitvoert, ook als er niemand ingelogd is. Een schoonmaakscript om drie uur 's nachts, een import elke tien minuten, een nieuwsbrief op de eerste van de maand: het zijn
Geschreven voor: Klant, Reseller, Beheerder
Een geplande taak is een opdracht die de server op vaste tijden voor je uitvoert, ook als er niemand ingelogd is. Een schoonmaakscript om drie uur 's nachts, een import elke tien minuten, een nieuwsbrief op de eerste van de maand: het zijn allemaal geplande taken. Wie eerder met een ander paneel of met crontab -e gewerkt heeft, kent ze als cronjobs — het is hetzelfde ding, met een scherm ervoor.
Je vindt ze op Accounts → je account → Geplande taken. Staat die tab er niet, dan zit dit onderdeel niet in je pakket; je hostingpartij kan het bijzetten.
Wat je opdracht krijgt
Dit is het stuk dat de meeste tijd kost als je het niet weet, dus het staat onder aan de pagina in plaats van in dit document alleen. Een geplande taak draait als jouw account, in je eigen omgeving:
| Wat | Waarde |
|---|---|
PATH | /usr/local/bin:/usr/bin:/bin |
Tijdelijke bestanden (TMPDIR) | /home/<jouw account>/tmp |
| Startmap | je eigen home |
| Shell | /bin/sh |
Drie dingen om te onthouden:
- Je taak start niet in dezelfde omgeving als je shell. Wat je in je
.bashrchebt gezet geldt hier niet. Gebruik daarom hele paden: nietphp script.php, maar/usr/bin/php /home/jij/script.php. - Je taak ziet je eigen bestanden en die van niemand anders. De server zet elke geplande taak in dezelfde afscherming als een SSH-sessie: je ziet je eigen home, je eigen processen, en niets van de buren. Een script dat naar
/home/iemand-anderskijkt vindt niets — dat is geen storing. - Je tijdelijke bestanden zijn van jou.
TMPDIRwijst naar je eigen map, dus ze tellen mee voor je schijfruimte en niemand anders leest ze.
Een taak inplannen
Klik op Nieuwe taak. Er schuift een venster open met, van boven naar beneden, de vragen in de volgorde waarin je ze beantwoordt.
Soort taak. Drie mogelijkheden:
- Commando — een opdracht zoals je die in een shell zou typen.
- URL ophalen — de server haalt een adres op. Handig voor scripts die eigenlijk via de website starten; de server gebruikt hiervoor
curl. - PHP-script — een PHP-bestand. Je kiest erbij welke website het uitvoert, en dan draait het met de PHP-versie van díe website. Dat is de reden dat de vraag gesteld wordt: een script dat met een nieuwere PHP draait dan de site waar het bij hoort, doet het hier goed en op de website niet.
Wanneer. Hier zijn drie manieren om hetzelfde te zeggen, en je mag ze door elkaar gebruiken:
- de voorinstelling bovenaan ("elk kwartier", "elke nacht om 3 uur");
- de vijf velden eronder — minuut, uur, dag van de maand, maand, dag van de week;
- de cron-expressie zelf, die altijd zichtbaar blijft en die je gewoon kunt typen.
Wat je ook gebruikt, de expressie eronder is wat de server leest. Die staat er met opzet altijd bij: het is de enige regel die je kunt nakijken voordat je iets voor elke nacht om drie uur inplant.
Uitvoer mailen. Wat er gebeurt met wat je opdracht op het scherm zet:
| Stand | Wanneer je bericht krijgt |
|---|---|
| Niet mailen | Nooit. Ook niet als de taak mislukt. |
| Alleen bij fouten | Alleen als de taak met een foutcode stopt. |
| Elke keer | Elke uitvoering, ook een geslaagde stille. |
Dit staat per taak in en niet één keer voor je hele account: een importscript dat elke tien minuten draait wil je niet elke tien minuten in je mailbox, en een maandelijkse factuurrun juist wel. Laat je het adres leeg, dan gaat het naar je account zelf.
Omschrijving. Optioneel, maar doe het. Over een jaar zegt /usr/bin/find /home/jij/tmp -mtime +7 -delete je niets meer, en "oude tijdelijke bestanden opruimen" wel.
Draai hem eerst een keer
Onderaan het venster staat Nu draaien. Die knop voert je opdracht meteen uit — precies zoals de planning dat straks doet, met dezelfde PATH, in dezelfde afscherming — en laat je zien wat eruit komt en met welke code hij stopte. De planning zelf verandert er niet van, en je kunt hem gebruiken vóórdat je iets opslaat.
Dit is de snelste manier om erachter te komen dat je een pad vergeten bent. Een taak die je zonder testen inplant, ontdek je pas de volgende ochtend — of helemaal niet, als je het mailen hebt uitgezet.
Een testrun stopt na dertig seconden. Een echte, geplande uitvoering krijgt wél alle tijd; die dertig seconden zijn er alleen omdat je op het scherm staat te wachten.
Aanzetten, uitzetten en verwijderen
Een taak die je uitzet blijft in de lijst staan en draait niet meer. Dat is iets anders dan verwijderen: je ziet nog wat er stond en je kunt hem later weer aanzetten. Verwijderen haalt hem echt weg; wat de taak eerder gedaan heeft blijft natuurlijk zoals het is.
Waarschuwingen die je kunt tegenkomen
"Dit draait elke 2 minuten." Onder de vijf minuten kan een taak beginnen voordat de vorige klaar is, en dan stapelen ze op tot de server ze niet meer bijhoudt. Het mag — een wachtrij die elke minuut kijkt is een normale wens — maar zorg dan dat je script zichzelf niet dubbel kan draaien.
"Niet via het paneel ingesteld." Regels die je zelf via SSH met crontab -e hebt gezet blijven gewoon draaien en worden hier alleen getoond. Het paneel raakt ze niet aan, want dat zou jouw werk overschrijven. Wil je zo'n regel wijzigen, doe dat dan ook via SSH.
Je pakket zit vol. Als je hostingpakket een maximum aantal taken heeft, is de knop Nieuwe taak uitgeschakeld zodra je dat aantal hebt, met het aantal erbij. Taken die je zelf via SSH hebt ingepland tellen daar niet in mee.
Op de commandoregel
Heb je SSH-toegang, dan kun je hetzelfde vanaf de server doen:
$ corectl cron list --account jouwaccount
ID ON SCHEDULE NEXT WHAT
c5496f97009b yes */10 * * * * 27-08 06:10 */10 * * * * /usr/bin/php …
every job runs with PATH=/usr/local/bin:/usr/bin:/bin and TMPDIR=/home/jouwaccount/tmp, in Europe/Amsterdam$ corectl cron add --account jouwaccount --schedule "17 3 * * *" \
--command "/usr/bin/find /home/jouwaccount/tmp -mtime +7 -delete" \
--description "oude tijdelijke bestanden opruimen" --mail errors$ corectl cron run --account jouwaccount --command "id -un; echo \$TMPDIR"En je gewone crontab -l blijft doen wat het altijd deed: de regels van het paneel staan er onderaan in, met een #corecp-regel erboven waar het paneel ze aan herkent.
Een map die buiten je home wijst
Maakt de server een map voor je aan in je homedirectory (de map tmp die je geplande taken voor tijdelijke bestanden gebruiken), dan volgt hij geen koppeling die buiten je home leidt. Heb je zo'n map vervangen door een koppeling naar een andere plek op de server, dan wordt de handeling geweigerd en staat erbij waarom. Haal de koppeling weg of laat hem binnen je eigen home wijzen, en probeer het opnieuw. Een koppeling die binnen je home blijft, zoals de document root die een import achterlaat, werkt zoals altijd.
Zie ook
- Bestanden, FTP en SSH — waar je scripts staan en hoe je ze er krijgt.
- De webterminal — een shell in het paneel, met dezelfde afscherming als je geplande taken.
- PHP-instellingen — welke PHP-versie een website draait, en dus welke jouw PHP-taak krijgt.