Cronjob scripting

Het maken van een cronjob kan soms een lastige opgave zijn. Vaak is het het moeilijkste om te vinden waar het fout gaat.

Het instellen van een cronjob

Omdat er veel verschillende systemen zijn waar het op verschillende manieren ingesteld dient te worden verwijs ik je hiervoor naar Cronjob.nl. Hier staat een uitgebreide uitleg over verschillende soorten systemen.

De cronjob aanroepen

Het commando dat aangeroepen moet worden ziet er ongeveer zo uit:

  1. /pad/naar/php /home/gebruiker/pad/naar/php/script.php

Dit kan per systeem verschillen. In Directadmin ziet dit er zo uit:

  1. /usr/local/bin/php -q -f /home/pad/naar/script.php

Argumenten meegeven

Soms kan het nodig zijn om een argument aan het script mee te geven. Dan kan eenvoudig door de variabelen achter het script te zetten, gescheiden door een spatie. In dit voorbeeld ga ik uit van een gebruikersnaam en een wachtwoord:

  1. /usr/local/bin/php -q -f /home/pad/naar/script.php noobtutorials cronjobscripting

Vervolgens kun je deze uitlezen met behulp van de variabele args kun je deze weer uitlezen:

  1. echo $args[1]; // noobtutorials
  2. echo $args[2]; // cronjobscripting

Met behulp van de functies func_num_args() en func_get_args() kun je kijken of er variabelen zijn, en deze één voor één uitlezen, onafhankelijk hoeveel er zijn.

De goede paden instellen

Een veel gemaakte fout is dat de meeste mensen niet weten dat een cronjob vaak vanuit een andere locatie gestart wordt. Een bestand insluiten met:

  1. include('includes/bestand.php');

Zal dan niet meer werken. Dit is vrij eenvoudig op te lossen door met chdir(). Wanneer je hierbij volledige pad opgeeft zal bovenstaande code wel werken. Het volledige pad kun je opvragen met behulp van getcwd(). Voorwaarde daarbij is is dat je dit wel vanuit de browser moet opvragen, en niet vanaf bijvoorbeeld de command line.

Voorbeeld
  1. chdir("/home/gebruiker/public_html/");

Op deze manier wordt het script uitgevoerd vanaf /home/gebruiker/public_html/, waardoor je wel weer bestanden kunt includen.

Hoe weet ik of mijn cronjob werkt?

Dat is een lastige. Vaak helpt het om een e-mail naar jezelf te sturen aan het eind van het script. Wanneer deze e-mail binnenkomt heeft het script tenslotte gedraaid. Wanneer jou script een output geeft wordt dit vaak ook ergens gelogd. In Directadmin wordt er een e-mail gestuurd met daarin de output van het script. Ook komt hier een foutmelding wanneer bijvoorbeeld het bestand niet bestaat. Bij andere systemen zoals cPanel en dergelijke worden deze foutmeldingen weer op andere manieren afgehandeld. Zie Cronjob.nl voor meer informatie

Vragen of opmerkingen?

Indien je nog vragen of opmerkingen hebt, kun je altijd contact opnemen.