12.6. cron instellen

Geschreven door Tom Rhodes.

Een zeer nuttig hulpprogramma in FreeBSD is cron(8). De daemon cron draait op de achtergrond en controleert voortdurend /etc/crontab. Ook controleert cron de map /var/cron/tabs, op zoek naar nieuwe crontab bestanden. Deze crontab bestanden bevatten informatie over specifieke taken die cron moet verrichten op gezette tijden.

cron gebruikt twee verschillende soorten instellingenbestanden: de systeemcrontab en gebruikerscrontabs. Deze formaten verschillen alleen in het zesde en verdere velden. In de systeemcrontab zal cron het commando draaien als de gebruiker die in het zesde veld is opgegeven. In een gebruikerscrontab draaien alle commando's onder de gebruiker die de crontab heeft aangemaakt, dus is het zesde veld het laatste veld; dit is een belangrijk beveiligingsaspect. Het laatste veld is altijd het commando dat gedraaid wordt.

Opmerking: Gebruikerscrontabs geven individuele gebruikers de mogelijkheid om bepaalde terugkerende taken automatisch te laten uitvoeren zonder dat root-rechten noodig zijn. Commando's in de crontab van een gebruiker worden uitgevoerd met de rechten van de eigenaar.

root kan ook een gebruikerscrontab aanleggen net als elke andere gebruiker. Dit is niet dezelfde als /etc/crontab, de systeemcrontab. Omdat de systeemcrontab in de praktijk de commando's als root uitvoert, is het doorgaans niet nodig om een gebruikerscrontab voor root te maken.

/etc/crontab (de systeemcrontab) ziet er uit als volgt:

# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $
# (1)
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin (2)
HOME=/var/log
#
#
#minuut uur     mdag    maand   wdag    wie     commando (3)
#
#
*/5     *       *       *       *       root    /usr/libexec/atrun (4)
(1)
Zoals in de meeste instellingenbestanden van FreeBSD zijn regels die met het karakter # beginnen commentaar. Commentaar wordt gebruikt als uitleg en geheugensteun. Commentaar dient niet vermengd te worden met commando's, anders wordt het commentaar opgevat als deel van het commando. Blanco regels worden genegeerd.
(2)
Eerst worden omgevingsvariabelen gedefiniëerd. Hoervoor wordt het is-gelijk karakter (=) gebruikt. In het bovenstaande voorbeeld wordt het gebruikt voor de variabelen SHELL, PATH en HOME. Als de regel SHELL ontbreekt, gebruikt cron standaard sh als shell. Voor de omgevingsvariabele PATH bestaat geen standaardwaarde. Als PATH ontbreekt moeten absolute paden gebruikt worden. Als HOME ontbreekt, gebruikt cron de thuismap van de gebruiker die cron aanroept.
(3)
In deze commentaarregel staan de zeven velden van een crontabdefinitie. Dit zijn minuut, uur, mdag, maand, wdag, wie en commando. De betekenissen liggen voor de hand: minuut is het aantal minuten van het tijdstip waarop het commando moet worden uitgevoerd; uur geeft het uur aan; mdag staat voor de dag van de maand; maand staat voor het maandnummer en wdag geeft de dag van de week aan. Het veld wie is bijzonder en bestaat alleen in /etc/crontab. Het geeft aan als welke gebruiker het commando uitgevoerd moet worden. Het laatste veld bevat het uit te voeren commando.
(4)
In deze regel worden aan de hierboven besproken opties waarden toegekend. Er wordt gebruik gemaakt van */5 en * karakters. Deze betekenen “eerst-laatst” en kunnen gezien worden als telkens. In deze regel staat dus dat atrun elke vijf minuten moet worden uitgevoerd door root, ongeacht welke dag of maand het is. Meer informatie over atrun staat in atrun(8).

Commando's kunnen een willekeurig aantal opties of argumenten meekrijgen. Als commando's echter meerdere regels nodig hebben moeten deze regels afgebroken worden met een backslash “\” karakter, om aan te geven dat ze op de volgende regel vervolgd worden.

Dit is de basisopzet voor elk crontab bestand. De enige uitzondering is de aanwezigheid van veld zes, waar de gebruikersnaam wordt aangegeven. Dit veld bestaat alleen in de systeemversie van /etc/crontab. Voor crontab-bestanden van individuele gebruikers moet dit veld worden weggelaten.

12.6.1. Een crontab installeren

Belangrijk: De onderstaande procedure moet niet gebruikt worden om de systeemcrontab /etc/crontab te wijzigen of te installeren. Er kan een gewone editor gebruikt worden. cron ziet dat het bestand veranderd is en begint direct met het gebruiken van de nieuwe versie. Deze FAQ vraag geeft verdere uitleg.

Om een nieuwe crontab te installeren moet eerst een bestand in het juiste formaat gemaakt worden en daarna moet het geiuml;nstalleerd worden met commando crontab:

# crontab crontabbestand

In dit voorbeeld is crontabbestand de naam van een eerder gemaakt crontab-bestand.

Er bestaat ook een optie om een lijst van geïnstalleerde crontab-bestanden op te vragen, namelijk de optie -l van crontab.

Gebruikers die hun eigen crontabbestand willen schrijven zonder het gebruik van een sjabloon, kunnen gebruik maken van crontab -e. Dit opent de EDITOR met een leeg bestand. Als het bestand wordt opgeslagen en de editor wordt afgesloten, wordt het bestand automatisch als crontab geïnstalleerd.

Een gebruikerscrontab kan verwijderd worden door de met crontab de optie -r te gebruiken.