Cron

Z openSUSE wiki

Cron jest demonem odpowiedzialnym za okresowe wykonywanie określonych poleceń. Polecenia są wykonywane z dokładnością do jednej minuty, według tabel programu cron. Domyślnie program ten jest zainstalowany i uruchomiony w systemie.

Nazwę swoją program zawdzięcza greckiemu bogowi Chronosowi.

Spis treści


Zarządzanie

Zadania cron, znajdują się w plikach, które zawierają tabele - crontab. Cron poszukuje plików z zadaniami w lokalizacjach:

/var/spool/cron/tabs/
/etc/cron.d/

Różnica pomiędzy tymi lokalizacjami, polega na tym, że w pierwszej lokalizacji pliki nazywane są według użytkowników znajdujących się w /etc/passwd, przez co tablica cron nie musi zawierać pola nazwy użytkownika.

Oprócz tych lokalizacji, cron przeszukuje też podkatalogi:

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

w których, zgodnie z nazwą, wykonuje umieszczone wewnątrz pliki (detale działania tego procesu, można odnaleźć w pliku /usr/lib/cron/run-crons).

Cron co minutę sprawdza zadanie do wykonania oraz czy uległy zmianie pliki konfiguracyjne, zatem nie ma konieczności restartowania demona a wręcz jest to nie wskazane, gdyż niektóre konfiguracje cron ponownie uruchamiają wtedy skrypty, które powinny wykonać się po uruchomieniu systemu.

Crontab

Podstawowym plikiem zadań cron, jest crontab:

/etc/crontab

Jego tabele zawierają następujące pola:

  • minuty
  • godziny
  • dni miesiąca
  • miesiące
  • dni tygodnia
  • polecenie

W polach minuty (0-59), godziny (0-23), dni miesiąca (1-31), miesiące (1-12), dni tygodnia - od niedzieli do niedzieli (0-7), oprócz cyfr, mogą znajdować się inne znaki:

  • * - dopasowuje się do każdej wartości
  • - - wyznacza przedział czasu/daty, np. dla drugiego pola 0-5, oznacza od północy, do 5 rano
  • / - określa interwał wykonywania, np. dla pierwszego pola 0-10/2, oznacza że skrypt będzie się wykonywał przez pierwsze dziesięć minut, co dwie minuty
  • , - pozwala wytypować konkretne terminy, np. w piątym polu tabeli, wartość 1,3 oznacza, że skrypt wykona się tylko w poniedziałki i wtorki


Istnieją rozszerzone opcje pliku crontab, które pozwalają w prostszy sposób zapisać typowe przedziały czasowe. Rozszerzenia te zastępują pięć pierwszych znaków i zaczynają się znakiem "@".

  • @reboot - uruchom raz po starcie systemu
  • @yearly - uruchamiane raz do roku (0 0 1 1 *)
  • @annually - uruchamiane raz do roku (0 0 1 1 *)
  • @monthly - uruchamiane raz na miesiąc (0 0 1 * *)
  • @weekly - uruchamiane raz w tygodniu (0 0 * * 0)
  • @daily - uruchamiane raz dziennie (0 0 * * *)
  • @hourly - uruchamiane raz na godzinę (0 * * * *)

Uprawnienia

Do nadawania uprawnień służą dwa pliki:

/etc/cron.allow
/etc/cron.deny

Domyślnie, w systemie istnieje tylko drugi z nich i zawiera użytkownika guest, co skutkuje brakiem możliwości używania crona przez tego użytkownika. Jeśli istnieje plik allow, to aby użytkownik miał uprawnienia, konieczne jest jego w nim umieszczenie (nawet jeśli nie ma go w deny).

Edytowanie

Główny plik crontab może być edytowany bezpośrednio przez roota, jednak pliki użytkowników powinny być edytowane przy użyciu polecenia crontab

crontab -e

Gdy użytkownik użyje tego polecenia, w domyślnym edytorze otwierany jest jego plik cron. Root może w ten sposób edytować też pliki innych użytkowników

crontab -e -u nazwa_uzytkownika

Jak już wcześniej była mowa, w tych plikach nie podaje się pola użytkownika.

Istnieje także możliwość wylistowania zawartości crontab

crontab -l
crontab -l -u nazwa_uzytkownika

lub jego usunięcie

crontab -r
crontab -r -u nazwa_uzytkownika


Przykłady

Poniższy przykład kopiuje (z nadpisywaniem) codziennie o godzinie 03:10, wszystkie pliki do zamontowanego katalogu backup (prosty sposób na codzienny backup danych na zewnętrzny napęd).

10 3 * * * /bin/cp -Rf /home/ja/* /mnt/backup/

Co dwie minuty wykonywany jest skrypt test.sh:

*/2 * * * * /home/ja/test.sh

Po każdym uruchomieniu systemu synchronizowany jest zegar:

@reboot /usr/bin/rdate -s tempus1.gum.gov.pl

Uwagi

  • Jeśli w tabeli, użytkownikiem jest root, to może on jako pierwszy znak wpisać "-" a wtedy cron nie zapisze w logu informacji o tym poleceniu.
-*/15 * * * *   root  test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1
  • W plikach crontab powinny być umieszczane pełne ścieżki do wykonywanych poleceń.

Zobacz też

  • at - jednorazowe uruchamianie zadań
  • anacron - uzupełnienie klasycznego crona