cron en at

Paul Wiegmans (paul@bonhoeffer.nl)
laatst gewijzigd

introductie

Cron is een programma dat herhaaldelijk op een bepaalde tijd een programma start. Het is meestal gebruikt voor het starten van bepaalde scripts zoals makewhatis of om een backupscript te starten. Het is een daemon, en zoals andere daemons blijft het programma in het geheugen slapen, totdat het een tijd is die in het configuratiebestand crontab is gespecificeerd is.

At is een programma waarmee eenmalig een programma kan worden uitgevoerd op een bepaalde tijd. De daemon atd zorgt hiervoor.

cron starten

In de meeste linuxsystemen is cron een standaard geinstalleerde daemon. Je kunt zelf cron starten of stoppen met

service crond start

respectievelijk

service crond stop  

Je kunt op een simpele manier controleren of cron aktief is

[paul@deimos vervolg]$ ps aux |grep crond
root 3925 0.0 0.2 1448 604? Ss 17:39 0:00 crond
paul 10680 0.0 0.3 1932 780 pts/0 R+ 20:59 0:00 grep crond

De bovenste regel laat zien dat cron daemon aktief is.

crontab

De tijdstippen waarop een programma moet worden gestart is opgeslagen in het bestand crontab . Oorspronkelijk was er slechts een : /etc/crontab . Dit was de systeem-crontab. In de meeste moderne linuxen (in ieder geval in Mandrake 9.2) wordt de systeemcrontab niet meer gewijzigd en zijn er een aantal directories aanwezig.

In deze directories kan de systeembeheerder scripts zetten, die dan vervolgens elk uur, elke dag, elke maand en elke week worden uitgevoerd.

Een regel in de systeem-crontab heeft de volgende vorm.

minuut uur maanddag maand weekdag gebruiker commando

Hierbij staat minuut, uur, maanddag, maand, weekdag voor een bepaald tijd waarop commando moet worden gestart, en dat gebeurt onder de gebruikersnaam gebruiker . In de meeste gevallen zullen de commandos in de systeem-crontab worden gestart als de gebruiker root.

crontab voor gebruikers

Bovendien is er een voor elke gebruiker een gebruikers-crontab. Een normale gebruikers kan hiermee zijn eigen taken starten op elk gewenst tijdstip. Deze crontab is voor de gebruiker verborgen, maar er is het commando crontab beschikbaar met 3 belangrijke opties. Hiermee kan elke gebruiker zijn eigen crontab aanpassen. De opties zijn gebruikt als volgt.

Formaat van crontab

Een regel in de gebruikers-crontab heeft de volgende vorm.

minuut uur maanddag maand weekdag commando

In elk van de eerste vijf waarden kan een getal worden ingevuld. Dit staat voor de respectievelijke waarde waarop commando wordt uitgevoerd.

Een voorbeeld:

# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.13906 installed on Tue Apr 26 22:08:07 2005)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)



# ik laat dit herhaaldelijk uitvoeren
* * * * * export DISPLAY=:0.0; kdialog --msgbox "Het is nu `date`"

Er zijn bovendien enkele regels zichtbaar die beginnen met # . Dit zijn commentaar regels en hebben verder geen betekenis voor cron. De onderste regel zorgt ervoor dat elke minuut (!) het commando export DISPLAY=:0.0; kdialog --msgbox "Het is nu `date`" wordt uitgevoerd. Dit commando brengt elke minuut een venster op het scherm binnen X windows met de datum en tijd.

De opdracht export DISPLAY=:0.0; kdialog --msgbox "Het is nu `date`" bestaat uit drie opdrachten:

  1. export DISPLAY=:0.0 en
  2. kdialog --msgbox "Het is nu `date`"
  3. date

De eerste opdracht zet een variabele waardoor programmas weten hoe ze uitvoer op de grafische omgeving kunnen brengen. De tweede opdracht kdialog zet vervolgens een boodschap op het scherm. Kdialog voert ook date uit en de uitvoer daarvan wordt in een venster zichtbaar gemaakt.

Nog enkele voorbeelden.

30 19 * * * export DISPLAY=:0.0; kdialog --msgbox "Het is nu `date`"

Dit voert het commando uit op elke dag om 19:30 .

0 * * * 1 export DISPLAY=:0.0; kdialog --msgbox "Het is nu `date`"

Dit voert het commando uit op elke maandag (weekdag 1) op elk heel uur (minuut 0).

Er zijn nog enkele bijzondere notaties die je hier kunt gebruiken, om herhalingen of reeks aan te geven.

   0 20 1,15 * * export DISPLAY=:0.0; kdialog --msgbox "Het is nu `date`"

Dit voert het commando uit om 8 uur 's avonds op elke 1e en 15e dag (1,15) van de maand.

   */10 * * 1-6 * export DISPLAY=:0.0; kdialog --msgbox "Het is nu `date`"

Dit voert het commando uit elke 10 minuten (*/10) op elke dag in de eerste 6 maanden van het jaar.

*/10 * * 1-6 * export DISPLAY=:0.0; kdialog --msgbox "Het is nu `date`"

Dit voert het commando uit elke 10 minuten (*/10) op elke dag in de eerste 6 maanden van het jaar.

Zelf een editor kiezen

Het commando crontab -e laat je de crontab bewerken in de standaard editor vi .  Als dit niet naar je zin is, dan kun je een andere editor naar eigen smaak kiezen. Dit gaat door het zetten van de environment variabele EDITOR de waarde te geven met de naam van een andere editor. Om de grafische editor Kate te kiezen, pas EDITOR aan volgt aan.

   $ set EDITOR=kate

Doe vervolgens om crontab te bewerken

$ crontab -e

en nu wordt niet vi gestart maar verschijnt de grafische editor Kate. Uiteraard moet hierbij wel de grafische omgeving X aktief zijn.

Het instellen van de variabele EDITOR heeft ook effect op andere programmas.


het programma at

Met at wordt op een zekere tijd een programma gestart. Bijvoorbeeld:

[paul@deimos etc]$ at 10:47PM
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
at> export DISPLAY=:0.0; kdialog --msgbox "hallo"
at>
job 4 at 2005-04-26 22:47

Na het commando at 10:47PM antwoord at met een prompt at>. Type hierna het commando dat je wilt uitvoeren en druk op Enter, en Ctrl-D om af te sluiten. Het commando komt in een wachtrij te staan en at geeft het bijbehorende jobnummer.

Met het commando atq kun je zien welke opdrachten in de wachtrij zitten. Met atrm kun je opdrachten uit de wachtrij verwijderen.

Voor het commando man at uit om meer te weten hierover.

Links

cron

http://www.unixgeeks.org/security/newbie/unix/index.html

at

http://www.netadmintools.com/art26.html