Planowanie skryptów za pomocą Cron

Wprowadzenie do skryptów Bash

Alex Scriven

Data Scientist

Dlaczego planować skrypty?

 

Istnieje wiele sytuacji, w których planowanie skryptów jest przydatne:

  1. Regularne zadania do wykonania — codziennie, co tydzień lub kilka razy dziennie.
    • Można ustawić przypomnienie w kalendarzu, ale co jeśli się zapomni!?
  2. Optymalne wykorzystanie zasobów (uruchamianie skryptów we wczesnych godzinach rannych)

Planowanie skryptów za pomocą cron jest niezbędne do znajomości nowoczesnych infrastruktur danych.

Wprowadzenie do skryptów Bash

Czym jest cron?

 

Cron jest częścią systemów uniksowych od lat 70. Ludzie są leniwi od tak dawna!

Nazwa pochodzi od greckiego słowa oznaczającego czas, chronos.

Jest sterowany przez plik crontab, który zawiera cronjobs — każdy określa, jaki kod uruchomić i kiedy.

Wprowadzenie do skryptów Bash

Crontab – silnik cronjobów

 

Aktualnie zaplanowane zadania (cronjobs) można wyświetlić następującym poleceniem:

crontab -l
crontab: no crontab for user

Wygląda na to, że trzeba najpierw utworzyć harmonogram (cronjob)!

Wprowadzenie do skryptów Bash

Struktura crontaba i cronjoba

Poniższy obraz z Wikipedii pokazuje, jak zbudować cronjob w pliku crontab. Można mieć wiele cronjobów — jeden w każdej linii.

Struktura crontaba

  • Do ustawienia jest 5 gwiazdek — po jednej na jednostkę czasu
  • Domyślna wartość * oznacza „każdy"
Wprowadzenie do skryptów Bash

Przykład cronjoba

Przejdźmy przez przykłady cronjobów:

5 1 * * * bash myscript.sh

  • Gwiazdka minut to 5 (5 minut po pełnej godzinie). Gwiazdka godzin to 1 (po 1:00). Ostatnie trzy to *, czyli każdy dzień i miesiąc
    • Ogółem: uruchamianie codziennie o 1:05.

 

15 14 * * 7 bash myscript.sh

  • Gwiazdka minut to 15 (15 minut po pełnej godzinie). Gwiazdka godzin to 14 (po 14:00). Kolejne dwie to * (każdy dzień miesiąca, każdy miesiąc roku). Ostatnia gwiazdka to dzień 7 (niedziele).
    • Ogółem: uruchamianie w każdą niedzielę o 14:15.
Wprowadzenie do skryptów Bash

Zaawansowana struktura cronjoba

Jeśli chcesz uruchamiać coś kilka razy dziennie lub co określony interwał, jest to możliwe:

  • Użyj przecinka dla konkretnych interwałów. Na przykład:
    • 15,30,45 * * * * uruchomi się o 15., 30. i 45. minucie dla godzin wskazanych przez drugą gwiazdkę. Tu jest to co godzinę, każdego dnia itd.
  • Użyj ukośnika dla „co X jednostek". Na przykład:
    • */15 * * * * uruchamia się co 15 minut. Również co godzinę, każdego dnia itd.
Wprowadzenie do skryptów Bash

Pierwszy cronjob

Zaplanujmy uruchamianie skryptu extract_data.sh każdego ranka o 1:30. Kroki są następujące:

  1. W terminalu wpisz crontab -e, aby edytować listę cronjobów.
    • Może zostać zapytany o edytor. nano jest prostą opcją z łagodniejszą krzywą uczenia niż vi (vim).
  2. Utwórz cronjob:
    • 30 1 * * * extract_data.sh
Wprowadzenie do skryptów Bash

Pierwszy cronjob

3. Wyjdź z edytora, aby zapisać

Jeśli używasz nano (na Mac), naciśnij ctrl + o, potem enter, a następnie ctrl + x, aby wyjść.

Zobaczy się komunikat crontab: installing new crontab

4. Sprawdź, czy wpis istnieje, uruchamiając crontab -l.

30 1 * * * extract_data.sh

Doskonale!

Wprowadzenie do skryptów Bash

Czas na ćwiczenia!

Wprowadzenie do skryptów Bash

Preparing Video For Download...