CRON jest ważnym demonem systemowym, którego
zadaniem jest uruchamianie programów cyklicznie lub o określonej porze.
Omówiona zostanie instalacja vixie-cron, który
oprócz standardowych usług posiada dodatkowe opcje konfiguracyjne i
zwiększone bezpieczeństwo
Instalacja
Program instalujemy za pomocą poldka:
Po zainstalowaniu program jest praktycznie gotowy do użycia.
Można więc od razu uruchomić demona korzystając z polecenia:
# /etc/rc.d/init.d/crond start |
Od tej pory demon może działać nieprzerwane - nie wymaga
restartów po rekonfiguracji.
Budowa tabel
W cronie istnieje podział na zadania systemowe i zadania
użytkowników. Pierwszych zwykle używa się do prac
administracyjnych, z drugich korzystają użytkownicy wedle
własnych potrzeb (o ile mają do tego prawo). Główna
konfiguracja demona (systemowa) umieszczona
jest w pliku /etc/cron.d/crontab, konfiguracje
lokalne użytkowników przechowywane są w plikach
/var/spool/cron/{$login}. O ile
/etc/cron.d/crontab może być swobodnie
modyfikowany za pomocą edytora tekstu, o tyle użytkownicy
powinni używać w tym celu odpowiedniego narzędzia (opisanego
w dalszej części).
Pliki konfiguracji crona nazywane są tabelami, zarówno główny
plik konfiguracji jak i konfiguracje użytkowników mają bardzo
podobną budowę. Są to pliki tekstowe o ściśle ustalonej składni, w
których jeden wiersz odpowiada jednemu zadaniu. Wiersz tabeli
systemowej ma następującą składnię:
{$data-czas} {$użytkownik} {$zadanie}
Nieco prostszą budowę mają tabele użytkowników:
{$data-czas} {$zadanie}
Pierwsze pole określa jak często wykonywane jest zadanie,
pole {$użytkownik} występuje jedynie
w konfiguracji globalnej (w
/etc/cron.d/crontab) i wskazuje z
jakimi prawami uruchamiane ma być zadanie. Trzecie pole to
operacja która ma być wykonywana. W tabelach użytkowników
nie podaje się nazwy użytkownika, gdyż polecenia tam zawarte
są automatycznie wykonywane z prawami ich właściciela.
Przykładowe zadania w /etc/cron.d/crontab:
02 01 * * * root find /home -size +100M > /root/duze_pliki.txt |
Przykładowa konfiguracja zwykłego użytkownika:
W tabelach oprócz zadań możemy definiować zmienne
środowiskowe np.:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=jakis_user
NICE=15 |
Pierwsza zmienna wskazuje powłokę (zamiast domyślnej
/bin/sh),
która ma być używana do wywoływania zadań, druga to ścieżka do
plików wykonywalnych. Trzecie pole to konto użytkownika do którego
będą wysyłane powiadomienia pocztą elektroniczną lub pełny
adres e-mail, ostatnia zmienna to priorytet wykonywanych
zadań (liczba nice).
Format daty i czasu
Sekcja {$użytkownik} i {$zadanie} nie wymagają komentarza więc
opisane zostanie jedynie pole {$data-czas}. Pole to składa się z
pięciu kolumn:
-
1-sza kolumna (zakres
0-59) oznacza
minuty.
-
2-ga kolumna (zakres
0-23) oznacza
godzinę.
-
3-cia kolumna (zakres
0-31) oznacza
dzień miesiąca.
-
4-ta kolumna (zakres
0-12) oznacza
miesiąc. (0 i 1 to styczeń)
-
5-ta kolumna (zakres
0-7) oznacza dzień
tygodnia (0 i 7 to niedziela)
-
6-ta kolumna określa komendę jaka
powinna zostać wykonana dla danego
wiersza.
Gwiazdka "*" oznacza cały zakres z możliwego przedziału.
Same zakresy w pierwszych pięciu kolumnach mogą być
reprezentowane w różny sposób. Więcej szczegółów na ten temat
dowiemy się wywołując polecenie man 5 crontab
Program vixie-cron posiada
także mało udokumentowany format wykonywania poleceń
Nazwa Działanie
------ -------
@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 * * * *"
Przykład:
@reboot /usr/bin/rdate -s ntp.task.gda.pl |
Tabele systemowe
Główną konfigurację systemu tworzymy za pomocą naszego ulubionego
edytora tekstu, poprzez modyfikację pliku /etc/cron.d/crontab.
Jego zawartość będzie podobna do poniżej przedstawionego przykładu:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=admin@foobar.foo
NICE=15
# run-parts
01 * * * * root /bin/run-parts /etc/cron.hourly
02 1 * * * root /bin/run-parts /etc/cron.daily
02 2 * * 0 root /bin/run-parts /etc/cron.weekly
02 3 1 * * root /bin/run-parts /etc/cron.monthly
0-59/10 * * * * root /bin/run-parts /etc/cron.10min
15 18 * * 1-5 root /bin/run-parts /etc/cron.gielda |
Poniżej napisu # run-parts umieszczone są
konfiguracje zadań, pierwsze cztery linijki stanowią domyślną
konfigurację demona. Program run-parts
służy do uruchamiania o jednej porze wszystkich programów
we wskazanym katalogu. Dzięki takim opcjom możemy dodawać
programy lub skrypty do odpowiednich katalogów bez konieczności
pisania regułek cron-a. Poniżej umieszczono opisy powyższych
przykładów:
Wykonanie poleceń zawartych w pliku (plikach) katalogu
/etc/cron.hourly codziennie, co godzinę -
zaczynając od pełnej pierwszej minuty (np. 02:01, 03:01 itd.):
01 * * * * /bin/run-parts /etc/cron.hourly |
Wykonanie poleceń zawartch w pliku (plikach) katalogu
/etc/cron.daily raz dzienie (o godz.
01:02):
02 1 * * * /bin/run-parts /etc/cron.daily |
Wykonanie poleceń zawartych w pliku (plikach) katalogu
/etc/cron.weekly raz w tygodniu (w
niedziele o godz. 02:02):
02 2 * * 0 /bin/run-parts /etc/cron.weekly |
Wykonanie poleceń zawartych w pliku (plikach) katalogu
/etc/cron.monthly raz na miesiąc
(w pierwszy dzień miesiąca o godz. 03:02):
02 3 1 * * /bin/run-parts /etc/cron.monthly |
Wykonanie poleceń zawartych w pliku (plikach) katalogu
/etc/cron.gielda raz dziennie w dni
robocze (od poniedziałku do piątku o godz. 18:15):
15 18 * * 1-5 /bin/run-parts /etc/cron.gielda |
Wykonanie poleceń zawartych w pliku (plikach) katalogu
/etc/cron.10min co 10 minut (każdego
dnia, zaczynając od pełnej godziny - czyli np. 01:00, 01:10,
01:20 itd.):
0-59/10 * * * * /bin/run-parts /etc/cron.10min |
Tabele użytkowników
Domyślnie użytkownicy nie mogą tworzyć własnych zadań cron-a,
aby im na to zezwolić każdy nich musi zostać dopisany do pliku
/etc/cron/cron.allow.
Użytkownicy powinni używać narzędzia crontab,
program ten pozwala na bardzo łatwe zarządzanie tabelą użytkownika.
Przyjmuje parametry określające rodzaj działania, które ma
być wykonane na tabeli. Polecenie crontab -l
wyświetla listę zdefiniowanych zadań, wywołanie
crontab -e otworzy plik konfiguracji do edycji,
zaś crontab -r usunie całą zawartość konfiguracji
użytkownika.
Wybranie opcji edycji tabeli spowoduje otworzenie edytora tekstu
określonego zmienną środowiskową EDITOR, po
skończonej edycji plik zostanie automatycznie poddany kontroli
poprawności i zapisany jako
/var/spool/cron/{$login}.
Najczęściej popełniane błędy przez użytkowników to zły
format daty/czasu lub brak znaku nowej linii po ostatnim
wierszu.
Root ma dodatkowo do dyspozycji możliwość zarządzania zadaniami
dowolnego użytkownika, w tym celu stosuje się opcję
-u z podaną nazwą użytkownika.
Komunikaty cron-a
Cron rejestruje wszystkie swoje prace do pliku
/var/log/cron za pośrednictwem demona
syslogd,
dodatkowo można wskazać adres e-mail, na który
mają docierać informacje o wystąpieniu błędów w wykonywaniu
zadań. Jeśli nie zdefiniuje zmiennej MAILTO
w tabeli to poczta zostanie wysłana na lokalne konto
właściciela tej tabeli.
Poczta elektroniczna jest jedyną formą informowania
zwykłych użytkowników o ewentualnych błędach zadań, gdyż
nie mają oni dostępu do logów.
Wysyłanie poczty elektronicznej zarówno do użytkowników
lokalnych jak i zewnętrznych będzie wymagało instalacji
lokalnego serwera poczty MTA. Może to być niemal dowolny
demon pocztowy, np.: Exim (opis w
tym dokumencie) lub Postfix (opis w
tym dokumencie).
Aby łatwiej było analizować problemy, do wiadomości wysyłanej
przez demon, dodawane są nagłówki X-Cron-Env,
zawierające dane środowiska np.:
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/sbin:/bin:/usr/sbin:/usr/bin>
X-Cron-Env: <MAILTO=root>
X-Cron-Env: <NICE=15>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root> |
|