Każdy administrator prędzej czy później dojdzie do wniosku, że część czynności jaką wykonuje można zautomatyzować i zlecić do wykonywania przez sam system. Fajnie by było, gdyby zmusić system operacyjny, aby codziennie o 3:00 uruchamiał aplikację tworzącą kopię zapasową kont użytkowników a raz w tygodniu sporządzał raport z ruchu w sieci. Oczywiście to wszystko jest możliwe dzięki pewnemu narzędziu o nazwie cron.

Czym jest CRON i jak on działa

Cron jest daemonem uniksowym, którego zadaniem jest cykliczne uruchamianie innych programów lub skryptów. Korzystając z tabel zwanych crontab, wie jaka aplikacja i kiedy powinna zostać uruchomiona.

Cron działa z dokładnością co do minuty. Daemon budzi się co minutę i wykonuje wiele czynności nim uruchomi zaplanowane zadanie. Przede wszystkim przegląda pliki w katalogu /var/spool/cron/crontabs lub /var/spool/cron w zależności od dystrybucji. Szuka tam plików tabel (crontab) o nazwach zgodnych z istniejącymi kontami systemowymi. Zapisane w nich zadania ładowane są do pamięci i sprawdzane, czy dane polecenie nie powinno zostać wykonane w tej minucie. Jeśli tak to zadanie zostaje uruchomione a wynik jego działania oraz standardowy strumień błędów przesyłany jest do właściciela tabeli lub na adres e-mail podany w zmiennej MAILTO w tej tabeli.

Dodatkowo sprawdzany jest czas modyfikacji tabel. Jeśli czas modyfikacji został zmieniony od ostatniego sprawdzania, cron przeładowuje wszystkie tabele zaczytując ich aktualną wersję do pamięci. Dzięki temu nie trzeba restartować daemona po każdej modyfikacji plików tabel.

Również co minutę sprawdzany jest plik /etc/crontab. Zapisane są tam dodatkowe reguły, które uruchamiają zadania co godzinę, dzień, tydzień i miesiąc. Zadania te zapisane są w katalogach:

  • /etc/cron.hourly
  • /etc/cron.daily
  • /etc/cron.weekly
  • /etc/cron.monthly

Konfiguracja plików tabel

Za całą konfigurację zadań odpowiadają pliki crontab. Pliki te posiadają specjalny format, który zawiera informację na temat czasu wykonania zadania, jak i samego polecenia. Crontab to również program, który służy do zarządzania tymi tabelami. Uruchomiony z odpowiednimi parametrami pozwala na zarządzanie zaplanowanymi zadaniami. Opcja -l wyświetla aktualną tabelę użytkownika, -r ją usuwa a -e pozwala na jej edycję.

Wydając polecenie crontab -e rozpoczniemy edycję tabeli. Pierwsza część takiej tabeli może zawierać opcjonalnie dwie zmienne środowiskowe: SHELL i MAILTO. Pierwsza zmienna ustala powłokę, w której cron będzie uruchamiał zadania. Druga natomiast określa użytkownika, do którego zostanie wysłany zostanie raport zawierający standardowy strumień wyjścia oraz standardowy strumień błędów, jeśli wykonywane polecenie umieści coś na jednym z nich.

Kolejną częścią pliku, i tym razem obowiązkową, jest właściwa tabela określająca uruchamianie poszczególnych komend. Linie zapisane są w formacie:

minuta godzina dzień miesiąc dzień-tygodnia /katalog/polecenie

Plik zawiera sześć kolumn. Pierwsze pięć z nich określa czas uruchomienia zadania, szósta definiuje komendę, która ma zostać wykonana. Puste linie, spacje oraz tabulacje są ignorowane. Linie, w których pierwszym niebiałym znakiem jest #, są komentarzami i też są ignorowane.

CRON
Zauważ, że komentarze nie mogą wystąpić w tej samej linii co komendy, ponieważ będą one wtedy potraktowane jak część komendy. Podobnie, komentarze nie są dozwolone w liniach ustawień zmiennych środowiskowych. Zakres wartości pól w tabelach mieści się w:

  • godzina 0 – 23
  • dzień miesiąca 1 – 31
  • miesiąc 1 – 12
  • dzień tygodnia 0 – 7

Dla miesięcy i dni tygodnia można używać również nazw. Użyj pierwszych trzech liter konkretnego dnia lub miesiąca (po angielsku, wielkość liter nie ma znaczenia). Zakresy lub listy nazw są niedozwolone.

Przykłady:

  • 1 * * * * polecenie – wykona polecenie w pierwszej minucie każdej godziny
  • 0 4 * * 0 polecenie – wykona polecenie co tydzień w niedzielę o godzinie 4:00
  • */2 * * * * polecenie – wykona polecenie co 2 minuty
  • 0 4 */2 * * polecenie – wykona polecenie co 2 dni
  • */2 8-16 * * * polecenie – wykona polecenie co 2 minuty w godzinach 8-16

Tabela systemowa zawarta w pliku /etc/crontab posiada nieznacznie inną składnię: pierwsze pięć pól określa czas uruchomienia zadania, szóste pole określa nazwę użytkownika, z którego uprawnieniami zadanie zostanie uruchomione, siódme pole definiuje komendę, która zostanie wykonana.

Bibliografia

  • tomlee

    Przydatne aliasy z vixie-cron:

    (wklejone z dokumentacji pld)

    @reboot Uruchom jeden raz przy starcie systemu

    @yearly Uruchom jeden raz w roku, "0 0 1 1 *"

    @annually To samo co @yearly

    @monthly Uruchom jeden raz w miesiącu, "0 0 1 * *"

    @weekly Uruchom jeden raz w tygodniu, "0 0 * * 0"

    @daily Uruchom jeden raz dziennie, "0 0 * * *"

    @midnight To samo co @daily

    @hourly Uruchom raz na godzinę, "0 * * * *"

  • Maroszka

    Zakresy miesięcy oraz dni miesiąca na liście wypunktowanej, są na moje oko nieprawidłowe ;)