Cronjobs zijn taken die periodiek worden uitgevoerd en ingesteld kunnen worden via het commando crontab. Het is een eenvoudige manier om taken automatisch uit te voeren. De basis uitleg over cronjobs kunt u terugvinden in een eerdere blog post op onze website.

Een cronjob kan echter ook een groot probleem voor de server opleveren wanneer eenzelfde taak meerdere keren en op hetzelfde moment actief is. Een veel voorkomend probleem is, dat een nieuwe taak wordt gestart terwijl de oude nog niet volledig afgerond is.

Als u bijvoorbeeld een cronjob heeft ingesteld die elke 5 minuten een taak uitvoert en die taak eigenlijk 7 minuten nodig heeft om te voltooien, dan zal op minuut 5 dezelfde taak nog een keer gestart worden. Dit heeft als gevolg dat er op dat moment twee dezelfde taken lopen. Het kan zelfs zodanig uit de hand lopen dat bij verkeerde instellingen een taak meer dan 10 – of meer – keer gelijktijdig kan draaien. U kunt zich voorstellen dat dit niet wenselijk is. Zo kan het mogelijk de volgende gevolgen hebben:

  • Datacorruptie; omdat dezelfde taak meerdere keren wordt uitgevoerd kan dat tot vreemde veranderingen leiden in uw (database-)gegevens.
  • Een trage website; omdat alle resources (systeembronnen) van uw server worden aangeroepen. Immers, elke draaiende cronjob heeft deze nodig en zal ze reserveren.

Uiteraard kan het zijn dat, het script wat wordt uitgevoerd, zelf al een mechanisme gebruikt om simultaan draaiende processen te voorkomen. In dat geval hoeft u Flock niet te gebruiken. Voor scripts die geen dergelijk mechanisme hebben, is er de volgende oplossen:

Flock

Onze High Perfomance Web servers zijn standaard uitgerust met de “flock” tool. Deze tool zorgt er voor dat dezelfde cronjob niet meerdere keren gestart kan worden. Dit doet flock door een tijdelijk “lock-” bestand aan te maken. Zo lang dit bestand aanwezig is zal er geen nieuwe taak gestart worden. Wanneer het commando (de cronjob) is uitgevoerd, zal flock het tijdelijke bestand verwijderen waardoor er weer een nieuwe taak gestart kan worden. Het gebruik is eenvoudig. Onderstaand een voorbeeld waarbij de standaard Magento cronjob wordt uitgevoerd met behulp van flock:

 */5 * * * * flock -xn "${TMP}cron.php.lock" php -q /var/hpwsites/<user>/website/html/webroot/cron.php >/dev/null 2>&1

Met de “-xn” parameter geeft u aan welk lock bestand er aangemaakt dient te worden. Deze moet verschillen per actieve cronjob. In bovenstaand voorbeeld gebruiken we een systeem variabele ($TMP) in combinatie met de omschrijving “cron.php.lock” wat resulteert in het aanmaken van het volgende lock-bestand “/var/hpwsites/tmp/cron.php.lock”.

Mocht u meer over flock willen weten dan kunt u, wanneer u bent ingelogd op uw HPW server, het volgende commando gebruiken om de handleiding te openen.

man flock