Cron is de belangrijkste Unix-tool om terugkerende beheerklusjes te automatiseren. Denk dan bijvoorbeeld aan het routeren van de logfiles, het genereren van webstatistieken en het checken van de mailspool. In de directory /etc/cron.d/ en een aantal parallelle directory's kun je de cronjobs van applicaties en daemons vinden (op Red Hat Linux). Deze worden daar geïnstalleerd met de betreffende softwarepakketten, en eventueel aangepast door de beheerder.

Crontabs

Maar ook gebruikers kunnen van de crondaemon gebruik maken. Daarvoor schrijven zij hun eigen crontab. Met de opdracht "crontab -e" kom je in de editor terecht. Daar schrijf je de opdrachtregels in het formaat " ".

Voorbeelden helpen hier beter dan een uitgebreide uitleg:

10 8,14 * * 1-5

elke werkdag om 10 over acht 's ochtends en tien over twee 's middags

0 20 1,15 * *

elke 1e en 15e van de maand om acht uur 's avonds

0 8-18/2 * * *

overdag elke twee uur

30 9 * * sun

alleen op zondagochtend om half tien

Voor veel voorkomende combinaties zijn afkortingen beschikbaar. Je kunt bijvoorbeeld "@hourly" gebruiken in plaats van "0 * * * * *". Op Linux zijn daar ook aparte directory's voor (bijvoorbeeld /etc/cron.hourly/). Zwaardere klussen kunnen je echter beter spreiden, zodat bijvoorbeeld de prestaties van een webserver niet inzakken. Om diezelfde reden verdient het aanbeveling om zwaardere jobs 's nachts te draaien. De parameters kun je gebruiken om de cronjobs onderling en met de workload van de machine af te stemmen.

In de crontab kun je verder nog omgevingsvariabelen zetten. Commentaarregels beginnen met een hekje.

Formaat

Als je bestaande cronjobs op het systeem bekijkt om inspiratie op te doen, let er dan op dat de bestanden niet allemaal hetzelfde formaat hebben. De files van de gewone gebruikers komen terecht in de directory /var/spool/cron/. Zij dragen de naam van de eigenaar en hebben het formaat zoals zojuist beschreven.

De crontabs in de directory /etc/cron.d/ bevatten ook de accountnaam waaronder die job uitgevoerd moet worden (tussen de tijd-specificatie en het commando in). De files in de directory's /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly en /etc/cron.montly bevatten helemaal geen tijdsaanduiding meer. Het zijn gewone shell-scripts. Ze worden aangeroepen vanuit het bestand /etc/crontab. Daarin kun je ook zien hoe deze jobs tussen vier en vijf 's nachts verspreid worden uitgevoerd.

Daemon

De crontabs worden uitgevoerd door de crondaemon. Die executeert niet echt elke keer alle bestanden in al die directory's, maar laadt ze bij het opstarten. Daarna houdt de daemon zelf in de gaten of er files gewijzigd zijn of dat er nieuwe zijn bijgekomen.

Elke minuut doorloopt de crondaemon de opdrachten in zijn lijst. De juiste commando's worden uitgevoerd, waarna de output per mail naar de eigenaar van de crontab wordt gestuurd. Wil je dat niet, dan kun je de output omleiden. Wil je dat de output naar een andere gebruiker wordt gestuurd, dan kun je de MAILTO variabele zetten.

De meeste accounts hoeven echter geen cronjobs te kunnen draaien. Die kun je uitsluiten door hun naam op te nemen in de file /etc/cron.deny. Op die manier voorkom je dat willekeurige gebruikers te veel resources van een systeem opsouperen. In de algemene voorwaarden van die providers die nog een Unix-shell aanbieden, staan ook vaak beperkingen wat dat betreft. Maar ook de veiligheid van het systeem is erbij gebaat als gebruikers die daar geen noodzaak toe hebben geen cronjobs kunnen runnen.

Je kunt deze restricties ook omgekeerd inrichten, door de accounts van de gebruikers die wel een crontab mogen schrijven in het bestand /etc/cron.allow op te nemen.

Andere tools

Gerelateerd aan de cronjobs zijn de at-commando's. Deze worden niet gebruikt voor regelmatig terugkerende klussen, maar om eenmalig een bepaalde opdracht op een specifiek tijdstip te laten uitvoeren. Zie "man at" voor meer uitleg en voorbeelden.

Daarnaast is er de batchopdracht. Deze executeert zijn klussen op het moment dat het rustiger is op het systeem, dat wil zeggen, als de load onder een bepaald niveau zit. Ook hier is een vergelijkbaar mechanisme voor de "allow" en "deny" van gebruikers beschikbaar. Wie meer wil met zijn batchklussen kan ook kijken naar (Generic) NQS (Network Queueing System).

Ten slotte is het goed om in dit verband nog even de nice- en renice-commando's te noemen. Daarmee kunnen processen op een lagere prioriteit worden uitgevoerd. De scheduler van het besturingssysteem zorgt dan dat deze achtergrondprocessen de diensten en applicaties van het systeem minder verstoren.

Bron: Techworld