Program cron pozwala użytkownikom systemu na uruchomianie programów o podanym czasie lub dacie, z dokładnością do minuty.
Cron powinien być uruchamiany z /etc/rc.d/ odpowiednim skryptem w czasie startu systemu.
Oczywiście w zależności od dystrybucji skrypty w /etc/rc.d/ mają rożną budowę i zasadę działania, dlatego pominę w tym artykule sam sposób startu demona "cron". W ogóle jestem na 99% pewny, że twoja dystrybucja domyślnie ma uruchomionego crona i nic nie musisz już uruchamiać ręcznie...
1. Zasada działania:
Cron przeszukuje pliki "crontab" (plik-tabela) które znajdują sie (domyślnie) w /var/spool/cron/crontabs/ lub (opcja - dotyczy pewnych funkcji administracyjnych) w /etc/ .
Pliki crontab posiadają unikalne nazwy zgodne z nazwami użytkowników i są tworzone i sprawdzane zgodnie z wpisami w /etc/passwd (nie dotyczy plików crontab w /etc/).
Cron budzi się co minutę, sprawdzając wszystkie zapisane tabele, czy przypadkiem jakaś komenda w tej minucie nie powinna być wywołana. Podczas wywoływania komend, wszelkie ich wykonanie jest przesyłane pocztą do właściciela tabeli (lub do użytkownika podanego w zmiennej MAILTO w tabeli, jeśli taki istnieje).
Co minutę sprawdzany jest dodatkowo czas modyfikacji (modtime) plików w /var/spool/cron/crontabs/ (lub czas modyfikacji /etc/crontab) czy był zmieniony. Jeśli tak, to cron sprawdzi czasy modyfikacji tabel i przeładuje wszystkie te, które były ostatnio zmienione. Dlatego nie trzeba restartować crona za każdym razem gdy zmodyfikuje się pliki tabel.
2. Budowa plików crontab:
Wpisy w plikach crontab zbudowane są z 6 pól. Pierwsze 5 pól określa czas wykonania, natomiast 6 pole czynność.
Znaczenie pól:
- Minuta (zakres 0-59)
- Godzina (zakres 0-23)
- Dzień (zakres 0-31)
- Miesiąc (zakres 0-12 lub nazwa, pierwsze 3 litery nazwy angielskiej)
- Dzień_Tygodnia (zakres 0-7 lub nazwa, pierwsze 3 litery nazwy angielskiej)
- Polecenie (reszta linii)
Pole może mieć gwiazdkę (*), czyli wykonuj zawsze.
Dozwolone są zakresy liczb. Zakresy są dwiema liczbami, oddzielonymi myślnikiem. Zakres ten jest domknięty.
np. 8-11 dla godzin oznacza wywoływanie w godzinach 8, 9, 10, 11.
Dozwolone są też listy. Lista jest zbiorem liczb (lub zakresów), oddzielonych przecinkami.
np. 1,2,5,9 albo 0-4,8-12
mozna równiez dzielić okresy czasu... np. */2 - wykonanie co 2 jednostki czasu
Przykładowy wpis w crontab:
*/2 * * * * echo "ten napis pojawia sie w pliku cos.txt co 2 minuty" >> cos.txt
----- przykładowy plik -----
#zmienne potrzebne do wykonania wpisów
# SHELL - konieczna jeśli ma być inna niż /bin/sh
# MAILTO - zalecane
# PATH i HOME - opcja
SHELL=/bin/csh # określona powłoka
PATH=/bin:/usr/bin:/usr/local/bin # wywoływanie po nazwie programu, a nie ścieżce
MAILTO=root # informację o wykonaniu komendy wysyłane są do...
HOME=/home_super # katalog domowy
# uruchamiaj się 5 minut po północy, codziennie
5 0 * * * $HOME/bin/cs/logi_run >> $HOME/logs/log_cs.txt 2>&1
# uruchamiaj się o 14:15 każdego 1-szego dnia miesiąca i wysyła maila -- wyjście jest
# przesyłane do root-a
15 14 1 * * mail liga_graczy@killpid.lan < wiadomosci_run
# uruchamiaj się o 20 i 23 w piatek i sobotę i wysyla maila
0 20,23 * * 5-6 mail liga_graczy@killpid.lan < zapisy_na_turniej_run
----- koniec ---------------
3. Program zarządający wpisami w crontab
W celu modyfikacji wpisów w crontab używa się polecenia crontab ;p.
$ crontab --help
crontab 2.3.3
crontab file zastąp crontab z pliku
crontab - zastąp crontab z stdin (klawiatura)
crontab -u user określ użytkownika
crontab -l [user] wyświetl crontab dla użytkownika
crontab -e [user] edytuj crontab dla użytkownika
crontab -d [user] usuń crontab dla użytkownika
crontab -c dir określ katalog crontab
Należy pamiętać, że jeśli istnieje plik /etc/cron.allow, użytkownik który ma korzystać z cron-a musi być tam wpisany.
Marek Bujna [killpid@linux.pl]