Cron
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ń.