Cronjobs zijn geplande taken die je op bepaalde momenten van de dag automatisch uit kunt laten voeren. Denk aan bijvoorbeeld een importscript. Je kunt cronjobs via DirectAdmin aanmaken, wijzigen en verwijderen.
Cronjobs aanmaken
1. Log in op DirectAdmin.
2. Ga in het menu naar 'Geavanceerde functies' → 'Cronjobs'.
3. Klik op 'Cronjob aanmaken' en voer de gevraagde gegevens in.
- Minuut, Uur, Dag van de maand, Maand en Dag van de week: specificeer de minuut, uur, dag van de maand, maand en dag van de week (respectievelijk) waarop het script uitgevoerd moet worden. De laatste staat voor zondag tot en met zondag. Zondag is 0 of 7. Lees hieronder meer over het invoeren van de tijden.
- Opdracht: het commando dat uitgevoerd moet worden. Een PHP-script begin je met /usr/local/bin/php. Eventueel kun je op op 'Voorkom e-mails' klikken om te voorkomen dat het script e-mails naar jouw hoofde-mailadres stuurt met eventueel uitvoer van dat script (denk aan foutmeldingen). Lees hieronder meer over commando's.
4. Klik op 'Aanmaken'.
Tijden kiezen
Allereerst is het belangrijk dat je geen 'standaardtijd' kiest voor het uitvoeren van je script. Een standaardtijd is bijvoorbeeld ieder heel uur, of ieder kwartier. Tijden als 2:00 en 10:30 zijn dus af te raden. Kies liever een tijd waarop de server het niet druk heeft (meestal tussen 4:00 en 6:00 uur), zoals 4:34 of iets anders willekeurigs. Op die manier wordt de uitvoer verspreid over de gehele dag en is het dus niet druk om bijvoorbeeld 0:00 uur.
Verder moet je een script zo min mogelijk uitvoeren. Een cronjob is meestal erg zwaar voor de server en misbruik van deze functionaliteit kan gevolgen hebben. Goed om te weten is dat cronjobs daarom maar maximaal één uur mogen draaien.
Verder moet je erop letten dat je een script niet iedere minuut uit laat voeren. Een asterisk (*) bij het minuutveld is dus onacceptabel.
Je kunt in het formulier tijden als volgt invoeren:
2 | de tweede minuut, uur, … |
---|---|
1,2 | het eerste en tweede minuut, uur, … |
* | iedere minuut, uur, … |
*/2 | iedere tweede minuut, uur, … |
1-3 | de eerste tot en met derde minuut, uur, … |
1,*/6,5-9 | een combinatie van bovenstaande |
Je kunt deze waarden invullen bij alle tijdseenheden, dus bij de minuten, uren, dagen van de maand, maanden en dagen van de week. Wil je bijvoorbeeld een script iedere tweede maand uitvoeren op de eerste maandag van de maand om 4:15 en 9:15, dan kun je het volgende invoeren:
Minute | 15 | ieder tijdstip is op de vijftiende minuut |
---|---|---|
Hour | 4,9 | het vierde en negende uur |
Day of Month | 1-7 | de eerste maandag van de maand moet tussen de eerste en de zevende van de maand zitten |
Month | */2 | iedere tweede maand |
Day of Week | 1 | maandag is nummer 1 (zondag = 0, maandag = 1, …, zaterdag = 6) |
Scripts en commando's
Je kunt alleen uitvoerbare bestanden als commando opgeven. Aangezien PHP-scripts geen uitvoerbare bestanden zijn (zie ook de uitleg over bestandsrechten), moet je eerst de PHP-module aanroepen. Deze is te vinden op de locatie:
/usr/local/bin/php
Een PHP-script in je public_html-map kun je dan aanroepen met het onderstaande commando. Vervang 'deb12345' met je eigen deb-nummer en 'voorbeeld.nl' met je eigen domeinnaam.
/usr/local/bin/php /home/deb12345/domains/voorbeeld.nl/public_html/script.php
Let op de spatie. Let er ook op dat eventuele output van deze scripts naar het primaire e-mailadres wordt gestuurd van jouw pakket (aangeduid door jouw deb-nummer, of in het geval van een gebruiker onder een reseller, de gebruikersnaam). Daarnaast zijn heel veel variabelen anders dan wanneer je voorbeeld.nl/script.php aan zou roepen. Eén van de belangrijkste punten is dat relatieve paden niet zullen werken; je moet absolute paden gebruiken (eventueel met behulp van de variabelen binnen $_SERVER).
Je kunt ook een pagina van buiten aanroepen, alsof iemand de pagina vanaf je website aanroept. Dat kun je doen met het volgende commando. Vervang 'voorbeeld.nl' met je eigen domeinnaam.
/usr/local/bin/wget -O - -q -t 1 "https://voorbeeld.nl/script.php"
Je omzeilt dan het probleem dat de relatieve paden niet meer kloppen, maar je script kan dan wel door iedereen aangeroepen worden. Bovendien is dit niet geschikt voor een cron die vaker dan 1x per dag uit wordt gevoerd en zou alleen mogen dienen als laatste optie als al het voorgaande niet blijkt te werken. Dataverkeer gegenereerd door dit type cron zal overigens twee keer mee worden gerekend (aangezien de output wordt geüpload en gedownload op dezelfde server).