Cronjobs
Wat zijn cronjobs en hoe stel ik ze bij Hipex in?
Wat zijn cronjobs
Een cronjob is een taak die op een vooraf ingesteld tijdstip een commando of een script uitvoert. Cronjobs zijn erg waardevol voor het uitvoeren van repeterende taken op een server. Denk hierbij aan bijvoorbeeld het optimaliseren van images of het legen van de cache. Door van deze taken een cronjob te maken hoef je dit niet zelf te doen maar gebeurt dit automatisch met een bepaalde frequentie.
Hoe stel ik cronjobs in bij Hipex?
Op de servers van Hipex wordt gebruik gemaakt van crontab. Crontab is een tool welke gebruikt wordt voor het toevoegen, aanpassen of verwijderen van crontaken. Bij Hipex heeft iedere SSH gebruiker zijn eigen crontab.
Crontab werkt met een syntax waarmee de frequentie van de cronjobs kan worden aangegeven:
* * * * *
โ โ โ โ โ
โ โ โ โ โโโโโโโโโ Dag van de week (0-7)
โ โ โ โโโโโโโโโโโโโ Maand (1-12)
โ โ โโโโโโโโโโโโโโโโโ Dag van maand (0-31)
โ โโโโโโโโโโโโโโโโโโโโโ Uur (0-23)
โโโโโโโโโโโโโโโโโโโโโโโโโ Minuut (0-59)
Weergeven, toevoegen en verwijderen van cronjobs
Om crontaken te kunnen beheren dien je ingelogd te zijn.
Cronjobs toevoegen
Om cronjobs toe te voegen kunnen we gebruik maken van de โeditโ optie van crontab.
Hiervoor kan je het volgende commando ingeven, het maakt overigens niet uit in welke directory je je bevindt op de server.
Je komt nu in crontab terecht. Crontab zal standaard in de โvi editorโ openen.
crontab -e
We adviseren bij het instellen van cronjobs gebruik te maken van het hipex cron:run commando:
hipex cron:run 'command' 'identifier' --timeout 900
Zoals te zien is, moet je als argumenten command en identiefier meegeven:
- Command: Het commando dat je wilt uitvoeren
- Identifier: De identifier van het commando welke je wil uitvoeren, dit mag je zelf bedenken. De identifier wordt gebruikt om een uniek Lock en log bestand te genereren.
Onderstaand voorbeeld hebben we een cronjob toegevoegd welke iedere nacht om 02:00u images optimaliseert.
0 2 * * * hipex cron:run 'cd /home/hipex/domains/hipex.io/application && /usr/local/bin/magerun hipex:media:minify -d "since 1 day ago" --quality=85 media/wysiwyg/' 'image-optimizer' --timeout 900
Variabelen
Bovenstaande cronjob kunnen we een stuk korter noteren als we gebruik maken van zogenoemde variabelen. Deze variabelen kunnen we bovenin crontab definiรซren. Zo kunnen we zorgen dat de PATH variabele gedefinieerd is waardoor we voor commandoโs niet langer het gehele pad voluit hoeven in te geven. De PATH variabele kan opgevraagd worden door onderstaande commando uit te voeren op de server:
echo $PATH
Bovendien kunnen we bijvoorbeeld de documentroot in een variabele opnemen zodat we ook de docroot niet iedere keer voluit hoeven te schrijven. Onderstaand hebben we de cronjob nogmaals uitgeschreven gebruikmakend van variabelen.
PATH=/home/<gebruiker>/.bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
DOCROOT=/home/hipex/domains/hipex.io/application
0 2 * * * hipex cron:run 'cd $DOCROOT && magerun hipex:media:minify -d "since 1 day ago" --quality=85 media/wysiwyg/' 'image-optimizer' --timeout 900
Cronjobs weergeven
Om cronjobs weer te geven kunnen we gebruik maken van het โlistโ commando van crontab. Met onderstaand commando kan je de actueel ingestelde crontab regels weergeven:
crontab -l
We zien hier nu dan ook netjes onze zojuist toegevoegde cronjob:
PATH=/home/<gebruiker>/.bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
DOCROOT=/home/<gebruiker>/domains/<domeinnaam>/public_html
0 2 * * * hipex cron:run 'cd $DOCROOT && magerun hipex:media:minify -d "since 1 day ago" --quality=85 media/wysiwyg/' 'image-optimizer' --timeout 900
Cronjobs uitschakelen en verwijderen
Het kan soms gewenst zijn cronjobs uit te schakelen. We kunnen de cronjob in commentaar zetten zonder deze compleet te verwijderen. Dit kan gedaan worden door een hekje (#) voor de betreffende cronjob te plaatsen.
PATH=/home/<gebruiker>/.bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
DOCROOT=/home/<gebruiker>/domains/<domeinnaam>/public_html
# 0 2 * * * hipex cron:run 'cd $DOCROOT && magerun hipex:media:minify -d "since 1 day ago" --quality=85 media/wysiwyg/' 'image-optimizer' --timeout 900
Als de cronjob ook in de toekomst niet meer nodig is kan de gehele regel worden verwijderd.