9.7. Schemalägga uppgifter med cron
and atd
cron
är demonen som är ansvarig för att exekvera schemaläggning och återkommando kommandon (varje dag, varje vecka och så vidare); atd
kan exekvera kommandon en enstaka gång, en specifik tid.
I ett Unixsystem schemaläggs många uppgifter för återkommande körning:
Alla användare kan schemalägga exekveringen av uppgifter. Varje användare har sin egen crontab i vilken de kan spara schemalagda kommandon. Den kan redigeras genom att köra crontab -e
(dess innehåll lagras i filen/var/spool/cron/crontabs/användare
).
Root-användaren har endast deras egna crontab, men kan också använda filen /etc/crontab
eller skriva ytterligare crontab-filer i katalogen /etc/cron.d
. Dessa två lösningar har fördelen med att kunna specificera användaridentiteten att använda då ett kommando exekveras.
Paketet cron innehåller några schemalagda kommandon som kan exekvera:
program i katalogen/etc/cron.hourly/
en gång i timmen;
program i katalogen /etc/cron.daily/
en gång per dag;
program i /etc/cron.weekly/
en gång i veckan;
program i /etc/cron.monthly/
en gång i månaden.
Många Debianpaket förlitar sig på denna tjänst: genom att lägga förvaltningskript i dessa kataloger försäkrar de sig om att deras tjänster är optimerade.
9.7.1. Format för crontab
Varje signifikat rad i crontab beskriver ett schemalagt kommando med följande sex (eller sju) fält:
värdet för minut (tal från 0 till 59);
värdet för timme (från 0 till 23);
värdet för dag i månaden (från 1 till 31);
värdet för månaden (från 1 till 12);
värdet för dag i veckan (från 0 till 7, där 1 motsvarar måndag. Söndag representeras av både 0 och 7; det är också möjligt att använda de tre första bokstäverna i dagens namn på engelska, som Sun
, Mon
och så vidare);
användarnamn under vars identitet kommandot ska exekveras (i filen /etc/crontab
och i fragmenten i /etc/cron.d/
, men inte användarens egna crontabfiler);
kommando att exekvera (när villkoren definierat i de första fem kolumnerna är uppfyllda).
Alla detaljer är dokumenterade i manualsidan crontab(5).
Varje värde kan uttryckas i form av en list av möjliga värden (separerat av komman). Syntaxen x a-b
beskriver intervallet av värden mellan a
och b
. Syntaxen a-b/c
besskriver intervallet med en ökningc
(exempel: 0-10/2
betyder 0,2,4,6,8,10
). En stjärna *
är ett jokertecken, representerande alla möjliga värden.
Exempel 9.2. Exempelfil för crontab
#Format
#min hour day mon dow command
# Hämta data varje natt kl 7:25
25 19 * * * $HOME/bin/get.pl
# 8:00 varje veckodag (måndag till fredag)
00 08 * * 1-5 $HOME/bin/dosomething
# Starta om IRC-proxy efter varje omstart
@reboot /usr/bin/dircproxy
9.7.2. Använda kommandot at
at
exekverar ett kommando vid en specifik tidpunkt i framtiden. Det tar önskad tid och datum som kommnadoradsparametrar samt kommando att köra i sin indata. Kommando kommer att exekverar som om det hade angetts i aktuellt skal. at
återställer bevarar även aktuell miljö för att kunna återskapa samma villkor när den kör kommandot. Tiden indikeras genom att följa de vanliga konventionerna: 16:12
eller 4:12pm
betyder 16:12. Datumet kan specificeras i flera europeiska och västerländska format, inklusive DD.MM.YY
(27.07.15
som representerar 27:e juli 2015).
$
at 09:00 27.07.15 <<END
>
echo "Glöm inte att grattulera Raphaël! på födelsedagen" \
>
| mail lolando@debian.org
>
END
varning: kommandon kommer exekveras /bin/sh
job 31 at Mon Jul 27 09:00:00 2015
En alternativ syntax fördröjer exekveringen för en given tid: at now + siffra period
. period kan vara minuter
, timmar
, dagar
, eller weeks
. siffra är talet av nämnda tidsenhet som måste ha passerats innan exekvering av kommandot.
För att avsluta en uppgift schemalagd av cron
, kör crontab
och ta bort motsvarande rad i filen crontab. För at
-uppgifterna är det nästan lika lätt: kör atrm uppgiftnummer
. Uppgiftsnumret indikeras av kommandot at
när du schemalägger det, men du kan finna det igen med kommandot atq
som visar aktuell lista av schemalagda uppgifter.