Schemalägg dina skript med Cron

Introduktion till Bash-skriptning

Alex Scriven

Data Scientist

Varför schemalägga skript?

 

Det finns många situationer där schemaläggning av skript är användbart:

  1. Återkommande uppgifter som behöver utföras – kanske dagligen, veckovis eller flera gånger om dagen.
    • Du kan sätta en kalenderpåminnelse, men tänk om du glömmer!?
  2. Optimal resursanvändning (kör skript tidigt på morgonen)

Att schemalägga skript med cron är grundläggande för att förstå moderna datainfrastrukturer.

Introduktion till Bash-skriptning

Vad är cron?

 

Cron har funnits i unix-liknande system sedan 70-talet. Människor har varit lata lika länge!

Namnet kommer från det grekiska ordet för tid, chronos.

Det styrs av något som kallas crontab – en fil som innehåller cronjobs, som var och en talar om för crontab vilken kod som ska köras och när.

Introduktion till Bash-skriptning

Crontab – motorn bakom cronjobs

 

Du kan se vilka scheman (cronjobs) som är inprogrammerade med följande kommando:

crontab -l
crontab: no crontab for user

Då behöver vi skapa ett schema (cronjob)!

Introduktion till Bash-skriptning

Struktur för crontab och cronjob

Den här bilden från Wikipedia visar hur du bygger upp ett cronjob i crontab-filen. Du kan ha många cronjobs, ett per rad.

Struktur för en crontab

  • Det finns 5 stjärnor att ange, en för varje tidsenhet
  • Standardvärdet * betyder "varje"
Introduktion till Bash-skriptning

Cronjob-exempel

Låt oss gå igenom några cronjob-exempel:

5 1 * * * bash myscript.sh

  • Minutstjärnan är 5 (5 minuter över). Timstjärnan är 1 (efter kl. 01:00). De tre sista är *, alltså varje dag och månad
    • Sammanfattning: körs varje dag kl. 01:05.

 

15 14 * * 7 bash myscript.sh

  • Minutstjärnan är 15 (15 minuter över). Timstjärnan är 14 (efter kl. 14:00). Nästa två är * (varje dag i månaden, varje månad). Sista stjärnan är dag 7 (på söndagar).
    • Sammanfattning: körs kl. 14:15 varje söndag.
Introduktion till Bash-skriptning

Avancerad cronjob-struktur

Om du vill köra något flera gånger per dag eller var X:e tidsenhet är det också möjligt:

  • Använd kommatecken för specifika intervall. Till exempel:
    • 15,30,45 * * * * körs vid minuterna 15, 30 och 45 för de timmar som anges av den andra stjärnan. Här är det varje timme, varje dag osv.
  • Använd snedstreck för "var X:e enhet". Till exempel:
    • */15 * * * * körs var 15:e minut – varje timme, dag osv.
Introduktion till Bash-skriptning

Ditt första cronjob

Nu ska vi schemalägga ett skript som heter extract_data.sh att köras varje morgon kl. 01:30. Gör så här:

  1. Skriv crontab -e i terminalen för att redigera din lista med cronjobs.
    • Du kan bli ombedd att välja textredigerare. nano är ett enkelt val med en flackare inlärningskurva än vi (vim).
  2. Skapa cronjobbet:
    • 30 1 * * * extract_data.sh
Introduktion till Bash-skriptning

Ditt första cron-jobb

3. Stäng redigeraren för att spara

Använder du nano (på Mac) trycker du ctrl + o, sedan enter och sedan ctrl + x för att avsluta.

Du ser meddelandet crontab: installing new crontab

4. Kontrollera att det finns där genom att köra crontab -l.

30 1 * * * extract_data.sh

Bra jobbat!

Introduktion till Bash-skriptning

Nu kör vi en övning!

Introduktion till Bash-skriptning

Preparing Video For Download...