Scheduler bez tajemnic - możliwości cyklicznego wykonywania programów
Ostatnia zmiana: 2023-05-17 19:19

Cron

Cron (scheduler) jest mechanizmem pozwalającym na cykliczne uruchamiania określonego polecenia w systemie linuksowym. Cykliczne oznacza albo co określony okres czasu albo o ściśle określonej godzinie lub dacie. Cron może uruchamiać zadania nie częściej niż co minutę, więc jeżeli istnieje potrzeba wykonywania czegoś co kilka sekund to najlepiej napisać własny skrypt z odpowiednią pętlą i poleceniem sleep. Cron występujący w OpenWrt jest w nieco uproszczonej formie, brak mu np. niektórych makr.

Crontab

Zadania definiuje się w specjalnym pliku będącym definicją poleceń do wykonania. Ma on określoną strukturę która jest wymagana do poprawnego działania. Definicja jednego zadania wygląda następująco:


    * * * * * komenda do wykonania
    - - - - -
    | | | | |
    | | | | +----- dzień tygodnia (0 - 6) (Niedziela=0, Poniedziałek=1, Wtorek=2,...,Sobota=6)
    | | | +------- miesiąc (1 - 12)
    | | +--------- dzień miesiąca (1 - 31)
    | +----------- godzina (0 - 23)
    +------------- minuta (0 - 59)

Za gwiazdkę można podstawić albo liczbę albo zakres. Najlepiej przedstawić to na przykładach:

  • Wykonanie pliku dziesięć minut po pełnej godzinie.


    10 * * * * /usr/bin/plik_do_wykonania


  • Wykonanie pliku co dziesięć minut.


    */10 * * * * /usr/bin/plik_do_wykonania


  • restart routera o 4.01


    1 4 * * * reboot


  • wyłączenie transmission o 9 rano


    0 9 * * * /etc/init.d/transmission stop


  • wykonanie backupu w każdą sobotę o 3:15 nad ranem


    15 3 * * 6 /usr/bin/backup.sh


Przykłady są proste, nie powinno być z nimi problemu. Można także z skorzystać z graficznego konfiguratora mojej produkcji.

Dodanie zadania do wykonania

Albo dodajemy zadanie poprzez wywołanie specjalnego edytora


    # crontab -e

należy wtedy wpisać całe polecenie ręcznie, albo dodajemy po prostu nowy wpis do crontaba


    # echo "*/10 * * * * /bin/tester.sh" >> /etc/crontabs/root

Po tej operacji dobrze jest zrestartować proces cron jeżeli jest już uruchomiony


    # /etc/init.d/cron restart

Uruchomienie crona



    # /etc/init.d/cron enable
    # /etc/init.d/cron start

Zakończenie

W większości przypadków niezbędne jest ustawienie prawidłowego czasu w systemie aby polecenia wykonywały się o właściwej godzinie.