Emil Vikström

Emil Vikström

Datorer och webben

Emil Vikström RSS Feed
 
 
 
 

Schemalägg program med crontab

Med crontab i GNU/Linux och andra Unix-liknande system kan du schemalägga program så att de körs automatiskt med jämna mellanrum, så kallade cronjob. Programmet cron läser in din inställningsfil, kallad crontab, och kör jobben. Detta fungerar på många Unix-liknande system: Ubuntu, Debian, Fedora, OpenSuse, Red Hat, BSD, Solaris med flera.

För att schemalägga ett program öppnar du din bästa terminal. Skriv sedan:

crontab -e

Detta öppnar en texteditor (oftast nano eller vim) med de cronjob som är associerade med just din användare. Jobben kommer att köras precis som att det vore du som startade dem.

Syntaxen för crontab

Många tycker att syntaxen i crontab är krånglig, men du lär dig den snabbt och då blir det lätt att göra även hyfsat avancerade scheman. Varje rad i filen är ett jobb och består av sex stycken fält (separerade med mellanslag eller tabb):

* * * * * date
- - - - - ----
 \ \ \ \ \  \
  \ \ \ \ \   - kommando att köra
   \ \ \ \  --- veckodag (Söndag = 0, lördag = 6)
    \ \ \  ---- månad (Januari = 1)
     \ \  ----- dag i månaden (1-31)
      \  ------ timme (Midnatt = 0)
        ------- minut (0-59)

Varje minut kollar cron igenom din crontab. Om alla tidsfälten matchar så körs kommandot. En asterisk betyder att det fältet alltid matchar, så exemplet ovan kör kommandot date varje minut.

Olika sätt att ange tid i crontab

  • En siffra matchar just det värdet: 5
  • Ett intervall matchar alla värden inom intervallet: 5-10
  • En division är lite krångligare. Den matchar när värdet på divisionen blir ett heltal (utan rest). För att köra var femte minut skriver man alltså så här i minutfältet: */5
  • Det går att kombinera ovanstående med kommatecken: 5,6,11-15

Exempel på crontab

# Radera en fil var femte minut på lördagar och söndagar:
*/5 * * * 0,6 rm -f /tmp/filen
# Skapa filen 'hej' varje natt kl 03:45:
45 3 * * * touch hej

Läsa svaret, eller slänga bort det?

Resultatet från de kommandon som körs skickas med e-post till den användaren vars cronjobb det var som kördes. Dessa brev levereras oftast till den lokala datorn och läses genom att skriva mail i terminalen. För att istället skriva resultatet till en fil skriver du så här:

*/10 * * 5 * kommando > filnamn
# För att även få med felmeddelanden:
*/10 * * 5 * kommando > filnamn 2>&1

Om du vill att resultatet från cron skickas till en bestämd e-postadress skriver du så här:

# I GNU/Linux kan du skriva så här på en egen rad
# högst upp i din crontab-fil:
MAILTO="adress@example.com"
# Detta funkar på alla system:
*/7 * * * * ls /tmp | mail adress@example.com

Vill du veta mer om cron?

Skriv en kommentar om du vill veta mer eller om du känner att något saknas. Jag svarar gärna på frågor eller ger ytterligare exempel!

Diskutera