Cron - automatyzacja zadań w systemie GNU/Linux

Slackware FAQ - czyli baza pytań i odpowiedzi.

Moderatorzy: Moderatorzy, Administratorzy

ODPOWIEDZ
Awatar użytkownika
Radek_R
Moderator
Posty: 1196
Rejestracja: 2004-06-14, 11:40
Lokalizacja: Kraków
Kontakt:

Cron - automatyzacja zadań w systemie GNU/Linux

Post autor: Radek_R »

[center]Cron - automatyzacja zadań w systemie GNU/Linux[/center]

Kod: Zaznacz cały

Spis treści:
0. Wstęp
1. Zasada działania
2. Zarządzanie wpisami
3. Budowa pliku crontab
4. /etc/cron.* i dodatki
0. Wstęp

Dcron, daemon crona używany w Slackware znacznie ułatwia wykonywanie cyklicznie powtarzających się operacji. W cronie umieszczone są takie zadania jak na przykład logrotate, updatedb czy rmmod. W cronie możemy umieścić inne ważne zadania do wykonania, dzięki czemu nie będziemy musieli pamiętać o rożnych czynnościach. Tyle tytułem wstępu, zabierzmy się do roboty.

1. Zasada działania

Cron po uruchomieniu siedzi cichutko w pamięci i co jakiś czas (co minutę) przeczesuje pliki crontab w poszukiwaniu wpisów dotyczących uruchamiania zadań. Pliki crontab z zadaniami do wykonania znajdują się w /var/spool/cron/crontabs i sa plikami-tablicami z zapisanym czasem wykonania oraz przypisanym poleceniem. Po zmianie którejkolwiek z tablic nie musimy restartować daemona, ten sam sobie rozpozna zmiany w plikach i je przeładuje.

2. Zarządzanie wpisami

Do zarządzania wpisami możemy posłużyć się poleceniem

Kod: Zaznacz cały

$ crontab
Polecenie to posiada szereg parametrów, z których najczęsciej używanym bedzie zapewne opcja -e. Służy ona do edycji pliku użytkownika wywołującego polecenie.
Do wylistowania zawartości własnej tablicy wykorzystamy opcję -l. Dzięki temu możemy się szybko zorientować cośmy tam powypisywali.
Jeżeli okazałoby się, że wpisaliśmy tam same pierdoły i chcemy się ich jak najszybciej pozbyć, proponuję użyć opcji -d. Spowoduje ona usunięcie pliku-tablicy z zapisanymi poleceniami.
Zamiast usuwać całą tablice z naszymi bazgrołami, możemy ją po prostu zamienić na inny plik z nowymi poprawnymi wpisami. Wystarczy podać jako parametr nazwę tego pliku i po sprawie. Możemy też jako parametr podać myślnik "-", wtedy zamiast z pliku crontab będzie czytał ze standardowego wejścia.
Jeżeli chcemy zastosować powyższe dla kogoś innego niż dla siebie, możemy podać po danej opcji nazwę tego użytkownika, dla którego będą przeprowadzone zmiany. W przypadku podania pliku lub "-" jako parametru, do zmiany użytkownika dla którego zostaną przeprowadzone modyfikacje, należy posłużyć się opcją -u [user]. Jednak w przypadku zmiany nie swoich ustawień powinniśmy być super użytkownikiem aby móc je wykonać. Bycie "ekstra" użytkownikiem niestety nie wystarcza w tym wypadku.

3. Zarządzanie wpisami

Skoro już wiemy jak edytować pliki tablic i jak wprowadzać zmiany, możemy przystąpić do opisania zawartości tych plików. Wpisy w plikach crontab zbudowane są z sześciu pól. Pierwsze pięć definiuje czas wykonania polecenia a ostatnie, szóste, definiuje polecenie które ma być o danym czasie wykonane. Pola opisujące czas mają następujące znaczenie, po kolei:
- minuta (0-59)
- godzina (0-23)
- dzień (1-31)
- miesiąc (1-12 lub nazwa, pierwsze 3 litery nazwy angielskiej)
- dzień tygodnia (zakres 1-7 lub nazwa, pierwsze 3 litery nazwy angielskiej)

Dane pole może zawierać (i często tak jest) gwiazdkę, co oznacza "wykonuj zawsze". Można używać zakresów liczb oddzielonych myślnikiem lub oddzielać poszczególne wartości oddzielone przecinkami. Dopuszczalne jest łączenie obu tych metod wskazywania wartości. Okresy czasu można również dzielić za pomocą slasha. Przykład:

Kod: Zaznacz cały

# polecenie będzie wykonywane co 5 minut
*/5 * * * * polecenie
# polecenie będzie wykonywane o pełnej godzinie oraz 20 i 40 minut po pełnej
0,20,40 * * * * polecenie
# polecenie będzie wykonywane co minute o godzinie 1 w nocy w dniach od 5 do 12 każdego miesiąca
* 1 5-12 * * polecenie
# polecenie będzie wykonywane o godzinie 12:53 co drugi dzień w miesiącu styczniu, kwietniu i od lipca do listopada włącznie
53 12 */2 1,4,7-11 * polecenie
4. /etc/cron.* i dodatki

Zapewne zauważyłeś drogi czytelniku katalogi o nazwach cron.hourly, cron.daily, cron.weekly i cron.monthly w katalogu /etc. Są tam umieszczone skrypty odpowiadające za wywołania ważnych i tych mniej ważnych zadań zadań dotyczących eksploatacji sytemu. Można tam oczywiście wrzucać dodatkowe z własnymi poleceniami do wykonania. Skrypty takie są zwykłymi plikami tekstowymi z umieszczonymi wewnątrz wywołaniami poleceń lub innych skryptów a także z kodem adekwatnym do wybranego interpretera. Poniżej przedstawiam przykładowy skrypt, który umieszczony na przykład w /etc/cron.daily/ będzie nam aktualizował czas systemowy:

Kod: Zaznacz cały

#!/bin/bash
ntpdate vega.cbk.poznan.pl
hwclock --systohc
Pierwsza linijka określa nam interpreter w którym dany skrypt będzie wywołany (w tym wypadku powłoka /bin/bash). Pozostałe linie to polecenia do wykonania. (Uwaga! Aby powyższy skrypt działał prawidłowo musimy mieć zainstalowaną w systemie paczkę ntp).
Skrypty umieszczone w katalogach /etc/cron.* wywoływane są z pliku crontab roota:

Kod: Zaznacz cały

# Run hourly cron jobs at 47 minutes after the hour:
47 * * * * /usr/bin/run-parts /etc/cron.hourly 1> /dev/null
#
# Run daily cron jobs at 4:40 every day:
40 4 * * * /usr/bin/run-parts /etc/cron.daily 1> /dev/null
#
# Run weekly cron jobs at 4:30 on the first day of the week:
30 4 * * 0 /usr/bin/run-parts /etc/cron.weekly 1> /dev/null
#
# Run monthly cron jobs at 4:20 on the first day of the month:
20 4 1 * * /usr/bin/run-parts /etc/cron.monthly 1> /dev/null
Jeżeli nam nie pasują godziny odpalania poleceń, możemy je tu pozmieniać. Po zakończeniu wykonywania polecenia, wysyła maila do użytkownika z wynikiem działania. Zeby temu zapobiec warto wynik działania polecenia przesłać do /dev/null. Uzyskujemy to (jak na przykładzie powyżej) za pomocą

Kod: Zaznacz cały

1> /dev/null
Wtedy na maila będą wysyłane tylko informacje o błędach, a i też tylko wtedy, gdy mam zainstalowanego sendmaila lub postfixa.

Ze względów bezpieczeństwa cron posiada pewne ograniczenia. Pliki crontab userów są ograniczone do 256 wpisów oraz linia nie może być dłuższa niz 1024 znaki wliczając znak końca linii.


==========================
Prosze o komentarze na temat tego co tam powyzej nawypisywałem :)
Ostatnio zmieniony 2007-01-01, 14:20 przez Radek_R, łącznie zmieniany 3 razy.
#358274
http://www.prook.net
ODPOWIEDZ