Cron – automatyzacja systemu

Uwaga: Ten wpis został utworzony ponad rok temu. Informacje w nim zawarte mogą być nieaktualne!

Cron jest ważnym demonem systemowym, którego zadaniem jest uruchamianie programów cyklicznie lub o określonej porze.
Demon jest to program lub proces, będący częścią większego programu lub procesu, który jest nieaktywny dopóki nie wystąpią zadane warunki, które spowodują jego uruchomienie.

Tak jak wcześniej wspomniałem, Cron to demon, który pozwala użytkownikowi na zaprogramowanie danej czynności z dokładnością do minuty. Programujemy raz i zapominamy o tym, wszystko robi się automatycznie.

1. Zasada działania:
Cron przeszukuje pliki crontab (plik-tabela).

Główny plik-tabela znajduje się w /etc/cron.d/crontab.
Każdy użytkownik posiada również własny crontab, który znajduje się (domyślnie) w /var/spool/cron/crontabs/.

Podstawowa różnica polega na tym, że w pliku /etc/cron.d/crontab należy określić użytkownika, który będzie wykonywał dany proces. W pliku /var/spool/cron/crontabs/ taka konieczność nie zachodzi, gdyż każdy plik przypisany jest do poszczególnego użytkownika np. /var/spool/cron/crontabs/mama, /var/spool/cron/crontabs/tata.

Osobiście wszelkie wpisy umieszczam w /etc/cron.d/crontab– moim zdaniem wygodniej.

2. Schemat wpisu.
Schemat wpisu w pliku /etc/cron.d/crontab wygląda następująco:

{$data-czas} {$użytkownik} {$zadanie}

Natomiast w plikach użytkowników (/var/spool/cron/crontabs/), pomijana jest nazwa użytkownika, więc:

{$data-czas} {$zadanie}

To był jednak schemat. Przykładowy wpis będzie wyglądał tak:

* * * * * użytkownik polecenie

Oczywiście w plikach użytkowników wpis będzie wyglądał:

* * * * * polecenie

A teraz szczegóły:

a. Data:
Data składa się z gwiazdek. Kolejne gwiazdki oznaczają kolejno:
– 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)

Przykład:
Jeśli chcemy, aby jakieś polecenie wykonywane było codziennie co minutę:

* * * * * użytkownik polecenie

Codziennie co dwie minuty:

*/2 * * * * użytkownik polecenie

Codziennie o 13:15:

15 13 * * * użytkownik polecenie

Codziennie o 14:00, 15:00, 16:00, 17:00:

00 14-17 * * * użytkownik polecenie

Trzynastego dnia każdego miesiąca o godzinie 19:05:

5 19 13 * * użytkownik polecenie

Codziennie w styczniu, marcu, maju, o godzinie 12:45:

45 12 * 1,3,5 * użytkownik polecenie

W każdą środę i piątek o godzinie 6:00:

00 6 * * 3,5 użytkownik polecenie

Jak widać na powyższych przykładach możemy używać:
przedziałów – np. 2-5 – oznacza przedział zamknięty od 2 do 5,
wyliczeń – np. 1,2,3,9,10,15,31 – polecenie zostanie wykonane jedynie w tych minutach/dniach miesiąca,
przeskoków – np. */2 – co dwie minuty/godziny/dni/miesiące (zależy od miejsca użycia).

b. Użytkownik:
Pole to dotyczy jedynie wpisów w /etc/cron.d/crontab. Użytkownik to po prostu login, którym logujesz się do systemu. Dla roota będzie to root.

c. Polecenie:
Tutaj panuje oooogrrroooomny wybór. Możesz robić praktycznie wszystko, dlatego opisanie tego nie jest możliwe.
Pomocny może okazać się zbiór artykułów Moc zaklęta w terminalu umieszczonych na stronie. Użyj wyszukiwarki na prawo, aby je odszukać.
Polecenia wyglądają tak, jakbyś wprowadzał je z terminala np.
Otworzenie Kadu:

*/2 11-17 * 2 * pawel kadu

Przeniesienie pliku (analogicznie usuwanie i kopiowanie):

00 */4 * * 1 basia mv /bardzo/ważny/plik /ściśle/tajne/miejsce

Zapisanie daty do pliku:

15 13 * * * zosia date >> plik.txt

Oczywiście to są zupełne podstawy, na pierwszy rzut oka nieprzydatne. Jednak istnieje możliwość, aby Cron robił automatyczny backup plików na serwerze, zrzut bazy MySql, odcinał użytkownikom dostęp do Internetu, wysyłać maila do kogoś… wszystko zależy od inwencji twórczej osoby, która go zaprogramuje.

Mała uwaga odnośnie wpisów w plikach użytkowników. Aby móc w pełni korzystać z dobrodziejstw Crona, należy dodać login użytkownika do pliku /etc/cron/cron.allow

Aby sprawdzić jakie zadania zostały przypisane dla użytkownika, w terminalu wydaj polecenie:

crontab -l

Aby usunąć crontab użytkownika, wydaj polecenie:

crontab -r
Jeżeli powyższy artykuł nie rozwiązał lub rozwiązał częściowo Twój problem, dodaj swój komentarz opisujący, w którym miejscu napotkałeś trudności.
Mile widziane komentarze z uwagami lub informacjami o rozwiązaniu problemu.