Strona główna

Cykliczne uruchamianie programów


Pobieranie 21.01 Kb.
Data19.06.2016
Rozmiar21.01 Kb.
Systemy operacyjne linux

Labolatorium 4


Zagadnienia:

Cykliczne uruchamianie programów

Program cron i anacron pozwala użytkownikom systemu na uruchomianie programów o podanym czasie lub dacie, z dokładnością do minuty.


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)

Typowa specyfikacja czasu składa się z pięciu kolumn: minuty, godziny, dnia miesiąca, miesiąca i dnia tygodnia. Każda z kolumn może zawierać:



znak gwiazdki * - oznacza "dla każdego".

liczbę - określa precyzyjny moment wykonania.

zakres - określa przedział, w którym komenda będzie wykonywana, np. 5-12.

zakres okresowy - "dziurawy" przedział, np. */3 - co trzeci, lub 4-8/2 - co drugi w przedziale 4-8.

wyliczenie - wyliczeniu podlegają liczby i zakresy, np. 2,4-6, oznaczający 2,4,5,6.

W miejscu pięciu kolumn specyfikacji czasu może znaleźć się jeden ciąg specjalny:



@reboot - uruchom przy starcie systemu.

@yearly - Raz w roku, "0 0 1 1 *".

@monthly - Raz w miesiącu, "0 0 1 * *".

@weekly - Raz w tygodniu, "0 0 * * 0"

@daily - Raz dziennie, "0 0 * * *"

@hourly - Raz na godzinę, "0 * * * *"
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 # katalog domowy

# uruchamiaj się o 14:15 każdego 1-szego dnia miesiąca i wysyła maila

15 14 1 * * mail olasik@wshe.lodz.pl < wiadomosci.txt

# uruchamiaj się o 20 i 23 w piatek i sobotę i wysyla maila

0 20,23 * * 5-6 mail olasik@wshe.lodz.pl < wiadomosci.txt

----- koniec ---------------


3. Program zarządzający wpisami w crontab

W celu modyfikacji wpisów w crontab używa się polecenia crontab:

crontab --help

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.




Anacron

Bardzo często istnieją sytuacje, kiedy nie potrzebujemy dokładności crona. Do wielu zadań porządkowych wystarczy, jeśli będą one uruchamiane raz dziennie, raz na tydzień bądź raz na miesiąc. Zadanie te cron wykonuje bardzo dobrze, jeśli maszyna, na której pracuje, jest włączona 24 godziny na dobę. W przeciwnym razie, jeśli komputer nie będzie włączony o wyznaczonej godzinie, zadanie nie wykona się. Aby radzić sobie z takimi sytuacjami, istnieje anacron. Anacron uruchamia zadania z dokładnością jednego dnia. Działa dobrze nawet wtedy, gdy komputer jest wyłączony przez dłuższy okres czasu - w takim przypadku od razu przy uruchomieniu wykonane są zaległe zadania.

Plikiem konfiguracyjnym anacrona jest /etc/anacrontab. Ma on format kolumnowy. Typowy anacrontab wygląda następująco:

SHELL=/bin/sh


PATH=/sbin:/bin:/usr/sbin:/usr/bin
# odstęp opóźnienie identyfikator komenda
1       5       cron.daily       nice run-parts --report /etc/cron.daily
7       10      cron.weekly      nice run-parts --report /etc/cron.weekly
30      15      cron.monthly     nice run-parts --report /etc/cron.monthly
Znaczenie kolejnych kolumn jest następujące:

odstęp - odstęp w dniach między uruchomieniami

opóźnienie - opóźnienie w minutach, służy zapobieganiu jednoczesnemu uruchomieniu zbyt wielu skryptów

identyfikator - ciąg znaków jednoznacznie identyfikujący zadanie

komenda - uruchamiane polecenie

W typowych dystrybucjach nie trzeba modyfikować anacrontaba samodzielnie - wystarczy umieścić swój skrypt w jednym z katalogów:



/etc/cron.daily - raz dziennie,

/etc/cron.weekly - raz w tygodniu,

/etc/cron.monthly - raz w miesiącu.

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


©snauka.pl 2016
wyślij wiadomość