Product SiteDocumentation Site

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:
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.