7.25. Ustalanie zadań do wykonania w systemie - crontab

W Linuksie mamy możliwość ustalania jakie zadania mają być wykonywane w określonym terminie. Do dyspozycji mamy dwa standardowe klasyczne uniksowe programy at i cron. Jaka jest między nimi różnica? Otóż at służy do jednorazowego wykonywania poleceń, np. ósmego marca b.r. o godz. 9:00 wyślij wszystkim paniom w firmie odpowiedniego maila. Cron służy do wykonywania zadań periodycznie, np. co godzinę rób mirrora pewnej strony WWW i umieszczaj ją na naszym serwerze.

Oba z tych programów pracują jako klient-serwer, tzn. zarządzaniem procesów steruje stale obecny w systemie demon (atd i crond), a użytkownik korzysta z programu klienckiego (odpowiednio at i crontab). Dla obu tych programów tworzy się przeważnie plik ze zleceniami. Dla at jest to skrypt shella. Natomiast format pliku crona jest dosyć skomplikowany i jest opisany poniżej:

Jedno zadanie jest opisane w jednej linii, zawierającej pięć pól wyjaśniających kiedy dane zadanie ma się wykonywać, po czym umieszcza się komendę shella, czyli:

<minuty> <godziny> <dni miesiąca> <miesiąc> <dni_tygodnia> <KOMENDA>
Można zastąpić dane pole gwiazdką, żeby zadanie wykonywało się "zawsze", np.:
0 1 * * * mail bgates@microsoft.com < obelgi
Oznacza, że codziennie o 1-szej nad ranem będziemy wysyłać na adres bgates@microsoft.com zawartość pliku obelgi.

Żeby zgłosić cronowi nasze zlecenie, należy uruchomić komendę:

crontab <nazwa pliku konfiguracyjnego>
Ponieważ tradycyjnie konfigurację umieszcza w pliku crontab, więc najczęstsze wywołanie crontaba ma postać:
crontab crontab
Każdy z użytkowników może mieć po jednym aktywnym pliku konfiguracyjnym crontaba (tzn. jeśli wywołamy powtórnie komendę crontab, to stare ustawienia zostaną zatarte). Jeżeli programy wywoływane jako komendy crontaba wyświetlają cokolwiek na standardowym wyjściu, dane te są przychwytywane przez crona i wysyłane mailem do właściciela crontaba. Żeby uniknąć wysyłania maili należy ustawić zmienną środowiskową MAILTO="". Można również wysyłać maile komuś innemu, ustawiając tę zmienną na określony adres, np. MAILTO="lucek@praterm.com.pl". Zmienną MAILTO można (i należy) ustawiać w pliku konfiguracyjnym crontaba. Jeżeli chcemy wykonywać periodycznie wiele niezależnych zleceń to musimy w jednym pliku konfiguracyjnym dla crontaba wpisać wiele rekordów (linii), tak jak na przykładzie poniżej (dwa zlecenia):
MAILTO=""
1,11,21,31,41,51 * * * * /usr/bin/rsync -av /opt/szarp/baza/ 192.9.200.12::leg1
3,13,23,33,43,53 * * * * /usr/bin/rsync -av  192.9.200.170::baza \
	/opt/szarp/leg2/baza/