luty 2004
44
dla początkujących
Zobacz w:
Cron
Piotr Machej
S
łyszeliście o człowieku zwanym Phileas Fogg? Ten
angielski dżentelmen, członek londyńskiego klubu
Reforma, to bohater słynnej powieści Juliusza Ver-
ne'a zatytułowanej W 80 dni dookoła świata. Już
w pierwszym rozdziale książki, gdy przyjmuje nowego słu-
żącego w swoim domu przy Savile Row, możemy zoriento-
wać się, że człowiek ten przywiązuje wielką wagę do punk-
tualności.
No dobrze, ale co ma to wspólnego z Linuksem, zapy-
tacie. Ano ma. W Linuksie mamy takiego służącego, od któ-
rego możemy wymagać wykonywania zadań z dokładno-
ścią co do minuty. Dokładnie tak, jak wymagał tego Phileas
Fogg od Jeana Passepartout. Służący ten nazywa się Cron
i został stworzony do zarządzania wykonywaniem zadań
i programów. W niniejszym artykule skupimy się na jednej
z wersji Crona (jest ich więcej), stworzonej przez Paula
Vixie (z tego powodu jest zwana Vixie Cron).
Przykład użycia
Gdy rano zwlokłem się z łóżka, miałem dziwne przeczucie,
że coś jest nie tak. Szybki rzut okiem na zegarek utwierdził
mnie w tym przekonaniu – było już wczesne przedpołu-
dnie. No tak, zagapiłem i nie nagrałem kolejnego odcinka
serialu mojej ukochanej. Nic to – wieczorem będzie powtór-
ka. Usiadłem przy komputerze i od razu ustawiłem Crona,
aby wieczorem na pewno nagrał film. Przy okazji spraw-
dziłem pocztę. No tak, pierwszy list to przypomnienie, że
dzisiaj kończy mi się bilet sieciowy. O, i jeszcze jeden – za
dwa dni urodziny kumpla. Kochany Cron znów się przy-
dał. Całkiem użyteczny jest ten program – na serwerze pil-
nuje mi, aby wszystkie usługi działały (sprawdza je co dzie-
sięć minut, a jak któraś nie działa, to uruchamia od nowa),
a w domu przypomina mi o ważnych terminach. No, muszę
lecieć do miasta. Ustawię jeszcze tylko znajomemu budze-
nie na rano. Na pewno się ucieszy. Dla Crona codzien-
ne wysyłanie o 7:00 SMS-a na bramkę to fraszka. A może
zmienić na 5:00? Nieee, nie będę wredny.
Jak to działa?
Cron jest demonem (przez cały czas działa w tle) urucha-
mianym zwykle podczas startu systemu. Program ten zaraz
po uruchomieniu przeszukuje szereg plików konfiguracyj-
nych, a następnie ładuje je do pamięci. Pliki te to kolejno:
/etc/crontab, pliki znajdujące się w katalogu /etc/cron.d/
oraz pliki w katalogu /var/spool/cron/. Pliki w tym ostat-
nim katalogu (/var/spool/cron/ ) powinny mieć nazwy
odpowiadające nazwom użytkowników zawartym w pliku
/etc/passwd (w ten sposób określa się, do kogo należy plik).
Wszystkie pliki konfiguracyjne zawierają informacje, jakie
zadania mają być wykonane o zadanych porach (format
plików crontab opisany jest w rozdziale Sposób obsługi).
Działający Cron co minutę sprawdza, czy ma do wyko-
nania jakieś zadania. Jeśli zostanie uruchomione jakieś
polecenie, jego wyjście jest przesyłane pocztą e-mail na
adres właściciela pliku konfiguracyjnego (można też okre-
ślić innego adresata listu poprzez zdefiniowanie w pliku
zmiennej środowiskowej MAILTO).
Dodatkowo, Crontab sprawdza co minutę, czy czas
modyfikacji katalogów z plikami konfiguracyjnymi lub
samego pliku /etc/crontab uległ zmianie. Jeśli tak się stało, to
sprawdza, który dokładnie plik został zmieniony i wczytu-
je go ponownie do pamięci. Z tego powodu nie ma potrze-
by restartowania demona Cron po modyfikacji plików kon-
figuracyjnych, ale do edycji plików należy wykorzystywać
jedynie program Crontab, który dba o odpowiednie usta-
wienie daty modyfikacji katalogu.
Warto zauważyć, że zwykle tworzone są dodatkowe
katalogi, z których korzysta Cron. W przypadku Auroksa
są one tworzone przez instalację pakietu crontabs, zawie-
rającego również domyślny plik /etc/crontab. Katalogi te to
kolejno: /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly
oraz /etc/cron.monthly/. Umieszczone w nich pliki urucha-
miane będą z pomocą programu run-parts odpowiednio co
godzinę, dzień, tydzień i miesiąc. Program run-parts rów-
nież jest zawarty w pakiecie crontabs Auroksa.
Instalacja
Pakiety z programem Cron znajdują się w każdej dystrybu-
cji. Zwykle mają nazwy cron lub vixie-cron. Zawierają one
demona Crond oraz program Crontab, służący do edycji
plików konfiguracyjnych. Oprócz tego może być przydat-
ny pakiet crontabs, zawierający podstawowy plik konfigu-
racyjny (/etc/crontab) oraz program run-parts.
O autorze:
Autor zakończył studia zaoczne na V roku Informatyki na
Politechnice Opolskiej. Z Linuksem (i ogólnie systemami
uniksowymi) ma styczność od wielu lat. Obecnie admi-
nistruje siecią blokową złożoną z dziesięciu komputerów.
Kontakt z autorem: autorzy@linux.com.pl.
45
www.linux.com.pl
cron
W przypadku dystrybucji Aurox, jeśli z jakiegoś powodu
nie zainstalowaliśmy wspomnianych pakietów podczas
instalacji dystrybucji, możemy zainstalować je teraz. Znaj-
dują się one na pierwszej płycie z dystrybucją. W celu insta-
lacji, po wejściu do katalogu z pakietami, wykonujemy stan-
dardowe polecenie:
rpm -Uvh vixie-cron-3.0.1-74.i386.rpm
S
crontabs-1.10-5.noarch.rpm
Jeśli mamy już zainstalowanego Crona, możemy zająć się
jego uruchamianiem.
Uruchamianie
Zacznijmy od sprawdzenia, czy Cron jest już uruchomiony.
Możemy tego dokonać przykładowo poleceniem
ps -aux |
grep cron
. Jeśli demon Cron działa, polecenie to powinno
zwrócić wynik podobny do poniższego:
root 942 0.0 0.2 1436 572 ?
S Dec130: 00 crond
gerard 2456 0.0 0.2 3824 608 pts/1
S 01:22 0:00 grep cron
Pierwsza z tych linii pokazuje, że demon Cron (crond)
działa. Druga z nich to nasze polecenie. Jeśli nie pojawi
się linia podobna do pierwszej, musimy sami postarać
się o uruchomienie demona. Możemy tego dokonać tylko
z konta użytkownika root, więc należy zalogować się na to
konto lub skorzystać z polecenia
su
-. Następnie poleceniem
which crond
sprawdzamy, gdzie znajduje się plik wyko-
nywalny (w Auroksie jest to plik /usr/sbin/crond). Teraz
możemy już uruchomić go:
/usr/sbin/crond
. Program auto-
matycznie przejdzie w tło – nie musimy dodawać przy
wywołaniu znaku
&
.
W Auroksie zamiast powyższej metody możemy rów-
nież użyć innego sposobu. Polecenie
/etc/rc.d/init.d/
crond status
zwróci nam informację, czy Cron jest urucho-
miony. Jeśli jest wyłączony, możemy go uruchomić polece-
niem
/etc/rc.d/init.d/crond start
.
Zwykle nie będziemy chcieli uruchamiać Crona ręcz-
nie. Najlepiej, jeśli będzie uruchamiał się podczas startu
systemu. Jeśli instalowaliśmy go podczas instalacji dystry-
bucji, to najpewniej właśnie tak jest. W innym przypadku
powinniśmy dodać go do skryptów startowych. W Auroksie
najprościej możemy dokonać tego uruchamiając program
ntsysv
, a następnie zaznaczając na liście pozycję crond.
Sposób obsługi
Mamy już zainstalowanego i uruchomionego Crona
i wiemy, jak działa. Pora na naukę wydawania poleceń
naszemu służącemu. W tym celu zapoznamy się z domyśl-
nym plikiem /etc/crontab i przeanalizujemy jego zawartość
(przedstawiona jest na Listingu 1).
Anacron
Nie zawsze potrzebujemy dokładności, którą oferuje nam
Cron. Jeśli zadowala nas wykonywanie zadań z dokładno-
ścią co do dnia lub tygodnia, może nas zainteresować Ana-
cron.
Narzędzie to jest szczególnie przydatne na komputerach,
które nie są włączone przez cały czas. Anacron po urucho-
mieniu komputera sprawdza, czy w kolejce oczekują zadania,
które powinny zostać wykonane, a jeśli tak, to je uruchamia.
Cron w takiej sytuacji zachowuje się inaczej – jeśli komputer
o określonej porze (wyznaczonej na wykonanie zadania) jest
wyłączony, to zadanie to po prostu nie zostanie wykonane.
Anacron i Cron mogą pracować równolegle na tym samym
komputerze. Podobnie jak Cron, Anacron zwykle instalowany
jest podczas instalacji dystrybucji. Jeśli nie został zainstalowa-
ny, możemy dokonać tego ręcznie, np. w Auroksie pakiet ana-
cron znajduje się na pierwszej płycie CD z dystrybucją.
Anacron korzysta z danych zapisanych w pliku /etc/anacrontab.
Jego składnia jest znacznie prostsza niż składnia pliku /etc/
crontab. Kluczowa linia ma postać:
okres opóźnienie identyfikator polecenie
Jeśli od ostatniego wykonania polecenia upłynął już czas
większy niż liczba dni określona w polu okres, to po licz-
bie minut wskazanych w polu opóźnienie następuje ponow-
ne wykonanie polecenia. Pole identyfikator wykorzystywa-
ne jest do zidentyfikowania konkretnego zadania w komu-
nikatach Anacrona (można je znaleźć przykładowo w pliku
/var/log/cron).
W pliku /etc/anacrontab możemy również definiować
zmienne środowiskowe analogicznie, jak możemy to robić
w pliku /etc/crontab (bliższy opis w rozdziale Sposób obsługi).
Demon At
Omawiając Crona trudno nie wspomnieć o innym demonie,
zwanym At. Również on pozwala na wykonywanie zadań
o określonej porze. Różnica polega na tym, że Cron wykonu-
je zlecone zadania okresowo, a At tylko jednorazowo. Oprócz
tego, At ma jeszcze bardziej skomplikowany system określa-
nia czasu niż Cron. Z drugiej strony, ten sam termin można
opisać na wiele różnych sposobów, zależnie od tego, jaki
system preferujemy.
Przykładowo, możemy wydać polecenie
at now + 5min
. Po
wciśnięciu klawisza [Enter] pojawi się znak zachęty at>, po
którym możemy wpisać polecenie do wykonania. Po kolejnym
wciśnięciu [Enter] możemy wpisać następną komendę lub
zakończyć wpisywanie wciskając klawisze [Ctrl]+[d]. Podane
komendy znajdą się w kolejce (możemy ją przeglądać pole-
ceniem
atq
) i zostaną wykonane za 5 minut. Inne przykłado-
we określenia czasu to
10am Jan 4 2004
(10:00 rano, 4 stycz-
nia 2004 roku) czy
7pm + 5 days
(za pięć dni o 19:00). Jeśli
mamy wątpliwości co do ustawienia czasu, zawsze możemy
skorzystać z któregoś z interfejsów graficznych (np. Webmin
lub VCron).
Jeśli chcemy zrezygnować z jakiegoś zadania ocze-
kującego w kolejce, możemy je usunąć poleceniem
atrm
numer _ zadania.
Wynik zwrócony przez wykonane zadania zostanie
wysłany listem e-mail do użytkownika, który je zlecił.
luty 2004
46
dla początkujących
Zobacz w:
Format plików crontab
Plik zaczyna się deklaracją kilku zmiennych środowisko-
wych. Pierwsza linia określa, jaka powłoka (SHELL) zosta-
nie użyta do wykonywania poleceń. Domyślnie jest to
powłoka /bin/sh, ale w naszym pliku wybraliśmy powło-
kę Bash – /bin/bash. Druga linia zawiera deklarację ście-
żek dostępu (PATH), w których Cron będzie szukał progra-
mów do wykonania, jeśli podamy tylko nazwę programu
(bez katalogu). Następna zmienna środowiskowa (MAILTO)
wskazuje użytkownika, który otrzyma list z wydrukiem
wyniku działania programu. Domyślnie list taki wysyła-
ny jest do użytkownika, do którego należy plik konfigu-
racyjny, ale dzięki ustawieniu tej zmiennej można wskazać
dowolny inny adres. Ostatnią zmienną środowiskową usta-
wianą w domyślnym pliku jest zmienna HOME, wskazują-
ca na katalog domowy.
We własnych plikach konfiguracyjnych możemy zdefi-
niować te i inne potrzebne nam zmienne środowiskowe.
Jeśli zaś zadowalają nas ustawienia domyślne, to deklaracje
tych zmiennych możemy pominąć.
Linie zaczynające się znakiem
#
są liniami komentarzy
– możemy w nich opisywać, do czego służą poszczegól-
ne polecenia.
Wreszcie dotarliśmy do tego, co w plikach crontab jest
najważniejsze. Są to informacje, jakie polecenia mają być
wykonywane o zadanych porach. Każda z linii określają-
cych zadanie do wykonania składa się z siedmiu kolumn.
Oznaczmy je w następujący sposób:
minuta godzina dzień_miesiąca miesiąc dzień_tygodnia
użytkownik polecenie
Pięć pierwszych pól pozwala nam wskazać, kiedy wyko-
nywane będzie polecenie. Pole użytkownik określa, z pra-
wami jakiego użytkownika ma być wykonane polecenie.
Nie występuje ono w plikach umieszczonych w katalogu
/var/spool/cron/, gdyż są one przypisane do konkretnych
użytkowników.
Rysunek 1.
VCron pozwala również na zarządzanie zadaniami
dla demona At, ale jest znacznie skromniejszy od Webmina czy
KCrona
Listing 1.
Domyślna zawartość pliku /etc/crontab
w Auroksie
SHELL
=/bin/bash
PATH
=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO
=root
HOME
=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Ostatnie pole, polecenie, wskazuje zadanie, jakie ma
być wykonane. Może to być nazwa skryptu lub progra-
mu, jak również pełne polecenie, takie jakie wpisaliby-
śmy w linii komend. Jeśli w polu tym użyjemy znaku pro-
centu (%), to zostanie on potraktowany jako znak nowej
linii, a wszelkie dane za pierwszym takim znakiem zosta-
ną przesłane na standardowe wejście komendy. Może
łatwiej będzie to objaśnić na podstawie przykładu. Jeśli
w polu polecenie wpiszemy
mail -s "List okresowy"
gerard%Gerard,%%Ja tylko testuję Crona%
, to do użyt-
kownika gerard zostanie wysłany list zatytułowany „List
okresowy" (dzięki działaniu polecenia
mail -s
„
List okre-
sowy
" gerard
). W treści tego listu będzie znajdować się
tekst umieszczony po pierwszym znaku % :
Gerard,
Ja tylko testuję Crona
Jak widać, pozostałe znaki % zostały zamienione na znaki
końca linii.
Czasem możemy nie chcieć otrzymywać wyniku działa-
nia polecenia. W takim przypadku możemy albo przekiero-
wać wyjście do pliku, albo też posłać je w pustkę. W pierw-
szym przypadku stosujemy w polu polecenie konstrukcję:
komenda >> nazwa_pliku
W drugim, gdy nie interesuje nas w ogóle wynik działania
programu, możemy skorzystać z polecenia:
komenda > /dev/null
Nie uchroni nas to jednak przed czytaniem ewentualnych
komunikatów błędów. Aby tego uniknąć, należy jeszcze
dodać
2>&1
na końcu wymienionych wyżej linii (a więc
przykładowo
komenda > /dev/null 2>&1
).
Polecenie
run-parts
, użyte w domyślnym pliku /etc/
crontab (Listing 1), powoduje uruchomienie kolejno wszyst-
kich plików wykonywalnych znajdujących się we wskaza-
nym katalogu.
47
www.linux.com.pl
cron
Definicje czasu
Jak już wspomniałem, najważniejsze w pliku crontab są
pola określające czas wykonania zadania. Mogą one przyj-
mować następujące zakresy:
• minuta – 0-59
• godzina – 0-23
• dzień_miesiąca – 1-31
• miesiąc – 1-12
• dzień_tygodnia – 0-7
Bliższego wyjaśnienia wymaga chyba tylko zakres pola
dzień_tygodnia. Jak wiadomo, w tygodniu mamy siedem
dni, ale pole to może przyjmować osiem wartości. Dzieje się
tak, gdyż zarówno wartość 0, jak i 7, odpowiadają niedzieli.
Dalej mamy odpowiednio poniedziałek (1), wtorek (2) itd.
W każdym z tych pól możemy wpisać gwiazdkę (
*
),
która odpowiada całemu zakresowi od pierwszej do ostat-
niej możliwej wartości.
Nie jesteśmy ograniczeni do pojedynczych wartości.
Jeśli przykładowo chcemy, aby zadanie było wykonywa-
ne od godziny 3 do godziny 8, to w polu godzina możemy
użyć zakresu
3-8
. Oprócz tego możemy korzystać z list war-
tości. Dzięki temu możemy wskazać, że zadanie ma być
wykonywane we wtorek, czwartek i niedzielę, przypisu-
jąc polu dzień_tygodnia wartość
2,4,7
. Obie te metody
możemy łączyć – pole dzień_miesiąca może wyglądać
przykładowo tak:
3,7,10-14,18-20,28
. W takim przypadku
zadanie będzie wykonywane w dniach: 3, 7, 10, 11, 12, 13,
14, 18, 19, 20, 28 danego miesiąca.
Stosując zakresy możemy też wyznaczyć krok, o jaki ma
wzrastać wartość. Jeśli przykładowo chcemy uruchamiać
zadanie od godziny 10 do 22 co trzy godziny, to możemy to
zapisać w polu godzina jako:
10-22/3
. Jest to znacznie krót-
szy zapis niż odpowiadający mu
10,13,16,19,22
. Jeśli zada-
nie ma być wykonywane po prostu co dwa dni, to możemy
w polu dzień_miesiąca zastosować zapis
*/2
.
Tak więc przeanalizujmy wartości z naszego przykła-
du z Listingu 1.
Pierwsza z nich to:
01 * * * *
Ustawione jest jedynie pole minuta. Tak więc zadanie
będzie wykonane o minucie 01 każdej godziny, każdego
dnia i każdego miesiąca, czyli po prostu co godzinę.
Drugi przykład jest nieco inny:
02 4 * * *
Tym razem ustalone mamy pola minuta i godzina. Czyta-
my więc, że zadanie będzie wykonywane o godzinie 4:02
(minuta – 02, godzina – 4) codziennie (pozostałe pola mają
wartość *, czyli pełny zakres).
Analiza dwóch ostatnich linii nie powinna już sprawić
kłopotów:
22 4 * * 0
to godzina 4:22 w każdą niedzielę,
natomiast
42 4 1 * *
to godzina 4:42 każdego pierwsze-
go dnia miesiąca.
Warto zwrócić jeszcze uwagę na fakt, że dzień wywo-
łania komendy można wskazać aż w dwóch polach: zarów-
no w dzień_miesiąca, jak i w dzień_tygodnia. Jeśli podamy
wartość (różną od *) w obu tych polach, to wskazane pole-
cenie zostanie wykonane w momencie, w którym aktual-
na data będzie się zgadzać z którymkolwiek z tych dwóch
pól. Przykładowo, jeśli określimy czas jako
10 5 3,7 * 4
, to
polecenie zostanie wykonane o godzinie 5:10 (pola pierw-
sze i drugie) trzeciego i siódmego dnia (pole trzecie) każde-
go miesiąca (pole czwarte), a oprócz tego w każdy czwar-
tek (pole piąte).
Modyfikacja pliku konfiguracyjnego
Dość teorii, czas na praktykę. Wiemy już wszystko, co
nam jest potrzebne, więc możemy z poziomu zwykłe-
go użytkownika stworzyć własny plik crontab. Jak już
wcześniej wspomniałem, należy w tym celu korzystać
z programu Crontab (wyjaśnienia w rozdziale Jak to
działa?).
Zacznijmy od sprawdzenia, czy mamy już jakiś plik
konfiguracyjny. Służy do tego polecenie:
Rysunek 2.
Aktywność dysków o godzinie 4.00 w nocy wynika
właśnie z uruchamiania różnych zadań przez Crona
Rysunek 3.
Gcrontab pozwala w wygodny sposób wprowadzać
nawet zakresy liczb do pliku crontab
luty 2004
48
dla początkujących
Zobacz w:
crontab -l
Jeśli uzyskamy napis
no crontab for nazwa_użytkownika
,
to znaczy, że nasz plik konfiguracyjny jeszcze nie istnieje.
Dla przypomnienia, jest to plik o nazwie /var/spool/cron/
nazwa_użytkownika.
W celu edycji naszego pliku crontab możemy użyć
polecenia:
crontab -e
Zanim to jednak zrobimy, warto ustawić sobie odpowied-
ni edytor. Jeśli już potrafimy pracować z Vi, to nie musimy
nic zmieniać (ten edytor zwykle uruchamia się domyślnie).
Jeśli jednak wolimy inny, powinniśmy wykonać polecenie
export EDITOR=nazwa_edytora
, przykładowo
export EDITOR=
mcedit
. Gdy już to zrobimy, możemy skorzystać z polece-
nia
crontab -e
w celu zmodyfikowania naszego pliku. Wpi-
sujemy do niego odpowiednie wartości (zgodnie z infor-
macjami z rozdziałów Format plików crontab oraz Defini-
cje czasu). Przypominam, że w prywatnych plikach crontab
nie korzystamy z pola użytkownik. Przykładowo, możemy
wpisać sobie linię postaci:
*/5 * * * * echo "Minęło pięć minut"
Rysunek 4.
Informacji o opcji @reboot na próżno szukać
w manualach dostępnych w niektórych dystrybucjach
(np. w Auroksie)
Uproszczone oznaczenia czasu
W niektórych przypadkach możemy uprościć składnię opi-
saną w rozdziale Definicje czasu. Zamiast pięciu pól okre-
ślających czas, możemy użyć jednego z ośmiu specjalnych
ciągów:
• @reboot – wykonuje polecenie raz, przy uruchomieniu
demona Cron;
• @yearly – wykonuje polecenie co roku, odpowiada war-
tości „
0 0 1 1 *
”;
• @annually – to samo, co @yearly;
• @monthly – wykonuje polecenie co miesiąc, odpowiada
wartości „
0 0 1 * *
”;
• @weekly – wykonuje polecenie co tydzień, odpowiada
wartości „
0 0 * * 0
”;
• @daily – wykonuje polecenie codziennie, odpowiada
wartości „
0 0 * * *
”;
• @midnight – to samo, co @daily;
• @hourly – wykonuje polecenie co godzinę, odpowiada
wartości „
0 * * * *
”.
Szczególnie interesująca jest wartość @reboot, pozwalająca
zwykłym użytkownikom systemu uzyskać podobną funkcjonal-
ność, jaką ma root, dodając zadania do skryptów startowych.
Jeśli więc zależy nam, aby jakieś programy uruchamiały się
zaraz po starcie systemu, to możemy je dodać do pliku cron-
tab używając w polu czasu ciągu @reboot.
Przykłady wpisów w pliku crontab
Wyłącza komputer o 23:00 (ostrzega 5 minut wcześniej). Polecenie
to powinno być w pliku crontab użytkownika root lub innego, mają-
cego dostęp do polecenia shutdown:
55 22 * * * /sbin/shutdown -h +5
Wykonuje kopię bezpieczeństwa plików z pracą dyplomową
w dni powszednie o 16:00:
00 16 * * 1-5 tar cvzf ~/archiwa/
S
dyplom.tgz ~/dyplom/
Co 15 minut wywołuje skrypt sprawdzający połączenie:
*/15 * * * * /usr/bin/
S
test.polaczenia
Wysyła Autorowi życzenia urodzinowe 4 stycznia o 17:35:
35 17 04 01 * mail -s „Sto
S
lat!” gerard@amber.eu.org%No i znów się
S
postarzałeś!%
W każdą niedzielę o 18:00 przypomina, że to już koniec weekendu:
00 18 * * 7 echo „Jutro znów do
S
pracy/szkoły! Koniec lenistwa!”
W każdą środę nagrywa transmisję z zawodów jeździeckich na
Eurosport:
00 22 * * 3 mencoder -tv on:
S
driver=v4l:input=2:width=384:height=288:
S
norm=pal:channel=14 -o /mnt/filmy/
S
eurosport.avi -ovc lavc -lavcopts
S
vcodec=mpeg4 -endpos 3600 > /dev/null 2>&1 &
Od 17. dnia miesiąca przez 3 dni przypomina, że kończy się waż-
ność biletu sieciowego:
15 10 17,18,19 * * echo „20. dnia
S
miesiąca kończy Ci się sieciówka!
S
Idź kupić!”
49
www.linux.com.pl
cron
Po wyjściu z edytora powinniśmy zobaczyć napis
crontab:
installing new crontab
, a następnie co 5 minut (a dokład-
niej o każdej liczbie minut będącej wielokrotnością pięciu
– 5, 10, 15 itd.) powinniśmy dostawać list o treści Minęło
pięć minut.
Jeśli podczas wpisywania linii popełniliśmy oczywisty
błąd (przykładowo zabrakło jednego pola czasu), Crontab
poinformuje nas o tym i zaproponuje poprawienie błędów.
Gdy się na to zgodzimy (na pytanie Do you want to retry the
same edit? odpowiadając
y
), wrócimy do edycji pliku. Jeśli
z kolei zrezygnujemy z poprawienia błędów (odpowiada-
jąc
n
), zawartość naszego pliku crontab nie zostanie zmie-
niona, a porzucona przez nas błędna treść zostanie zapisa-
na w pliku tymczasowym. O nazwie tego pliku zostaniemy
powiadomieni komunikatem o treści podobnej do crontab:
edits left in /tmp/crontab.3730.
Czasem wygodniej jest nam przechowywać zawar-
tość pliku konfiguracyjnego w naszym katalogu. Jeśli
chcemy później w łatwy sposób przenieść tę zawar-
tość do pliku crontab, możemy po prostu wywołać
polecenie:
crontab nazwa_pliku
W takim przypadku treść pliku zostanie skopiowana do
pliku /var/spool/cron/nazwa_użytkownika.
Do szybkiego usunięcia zawartości naszego pliku cron-
tab służy polecenie:
Rysunek 5.
Edycja pliku crontab z użyciem Webmina
Interfejsy graficzne
Wielu użytkowników Linuksa nie przepada za pracą w trybie
tekstowym i woli graficzne nakładki. Autorzy oprogramowania
poszli im na rękę, dzięki czemu dostępnych jest szereg gra-
ficznych interfejsów do programu Crontab. Wymienić można
kilka z nich: KCron (dostarczany wraz z KDE), Vcron, Gcron-
tab, czy wreszcie prawdziwy kombajn – Webmin. Osobiście
najbardziej przypadł mi do gustu Webmin – może dlatego, że
już z niego korzystałem i wiem, że jest wygodny.
Webmin
Jeśli nie mamy jeszcze zainstalowanego Webmina, możemy
pobrać go ze strony domowej. Instalacja nie powinna spra-
wić problemów. Jeśli będziemy chcieli zainstalować Webmina
prosto z pakietu (webmin-1.121-1.noarch.rpm w chwili pisania
artykułu) w Auroksie , to może być konieczna chwilowa zmiana
zawartości plików /etc/issue oraz /etc/issue.net na „Red Hat
Linux release 9.0”. Wynika to z faktu, że Webmin nie wspie-
ra Auroksa, natomiast doskonale wspiera Red Hata, z którego
Aurox się wywodzi. Po zainstalowaniu pakietu możemy przy-
wrócić wspomnianym plikom poprzednią treść.
Z Webminem łączymy się za pomocą przeglądarki inter-
netowej (przykładowo Mozilla) podając adres http://localhost:
10000/. Następnie należy podać nazwę użytkownika root
i jego hasło. W sekcji System możemy znaleźć odnośnik Har-
monogram zadań crona. Po jego wybraniu ukazuje nam się
spis aktualnie istniejących zadań, które zostały wyznaczone
do wykonania. Wybierając nazwę zadania możemy sprawdzić
dokładniejsze ustawienia.
Możemy również skorzystać z odnośnika Utwórz nowe
zadanie dla crona. Tutaj możemy w łatwy sposób zaznaczyć
terminy wykonywania konkretnych zadań.
Zacznijmy od wypełnienia pola Uruchom zadanie crona
jako. Możemy w nie wpisać nazwę użytkownika, z którego
prawami ma być wykonane zadanie (jeśli chcemy, to możemy
tę nazwę wybrać z rozwijalnej listy ukazującej się po wciśnię-
ciu przycisku z trzema kropkami). Pole Aktywne zostawia-
my zaznaczone na Tak. Następnie w polu Polecenie wpisuje-
my treść polecenia, które chcemy uruchamiać. Jeśli chcemy
przekazać jakieś dane na wejście polecenia, możemy to
wpisać w kolejnym polu. Są to dane, które normalnie wpisy-
walibyśmy po pierwszym znaku procentów (%). W polu tym
nie musimy stosować znaków % – możemy po prostu wciskać
[Enter] w celu uzyskania nowej linii.
W linii Kiedy uruchomić musimy zdecydować, czy sko-
rzystamy z uproszczonej listy wyboru (patrz ramka Uprosz-
czone oznaczenia czasu), czy też wskażemy dokładne pory
wykonania zadania (Run at times selected below...). W pierw-
szym przypadku (Run on selected shedule...) nasze zadanie
ogranicza się do wybrania z listy odpowiedniej częstotliwości
wykonywania zadania. W drugim wskazujemy odpowiadają-
ce nam minuty, godziny, dni miesiąca, miesiące i dni tygodnia.
Każde z tych pól może mieć wartość Wszystkie (odpowiada to
* w wersji tekstowej). Jeśli w którymś z pól chcemy zaznaczyć
więcej niż jedną wartość (przykładowo chcemy zaznaczyć
miesiące Styczeń, Maj i Lipiec), to po zaznaczeniu myszką
pierwszej wartości przytrzymujemy klawisz [Ctrl] i zaznacza-
my pozostałe wartości.
Gdy ustawienia już nas satysfakcjonują, wciskamy przy-
cisk Utwórz.
Z pomocą Webmina możemy również zarządzać dostę-
pem użytkowników do zadań crona. Po wybraniu tego odno-
śnika zobaczymy niewielki formularz. Domyślnie zaznaczona
jest pierwsza opcja – Pozwól wszystkim. Jeśli chcemy ogra-
niczyć dostęp do crona, wybieramy jedną z opcji: Pozwól
tylko wymienionym lub Zabroń tylko wymienionym, a następ-
nie wpisujemy w odpowiednim polu nazwy wybranych użyt-
kowników. Możemy też wcisnąć przycisk z trzema kropka-
mi i wybrać odpowiednich użytkowników z listy. Następnie
zatwierdzamy zmiany przyciskiem Zachowaj.
luty 2004
50
dla początkujących
Zobacz w:
crontab -r
Warto jeszcze wspomnieć o tym, że superużytkownik (root)
może zarządzać plikami crontab innych użytkowników.
Wystarczy, że do powyżej opisanych wywołań programu
Crontab doda opcję -
u nazwa_użytkownika
.
Administracja
Domyślnie wszyscy użytkownicy mają możliwość korzysta-
nia z Crona. Nie zawsze jednak administratorowi musi to
odpowiadać. Wszystkich administratorów ucieszy z pewno-
ścią fakt, że można w łatwy sposób określać, którzy użyt-
kownicy mogą korzystać z Crona. Służą nam do tego dwa
pliki – /etc/cron.allow oraz /etc/cron.deny.
Jeśli istnieje plik cron.allow, użytkownik musi być
w nim wymieniony, aby móc korzystać z polecenia cron-
tab. Jeśli nie utworzymy pliku cron.allow, lecz stworzy-
my plik cron.deny, to użytkownik nie może być w nim
wymieniony, jeśli ma mieć możliwość korzystania z pole-
cenia crontab. Gdy nie istnieje żaden z tych plików,
dostępność polecenia crontab dla zwykłych użytkowni-
ków zależy od konfiguracji konkretnego systemu (np. od
praw dostępu do plików i katalogów).
W obydwu plikach nazwy użytkowników podajemy po
jednej w każdej linii.
Zakończenie
Nie ulega wątpliwości, że narzędzia typu Cron i Anacron
są niezbędne w każdym systemie. Dbają one o wykony-
wanie okresowych czynności, przez co odciążają użyt-
kownika i pozwalają mu zająć się sprawami, które rze-
czywiście wymagają jego uwagi. Pamiętać jednak należy,
że Cron jest tylko narzędziem, więc wymaga odpowied-
niej obsługi.
KCron
KCron jest innym wygodnym interfejsem graficznym dla pro-
gramu Crontab. Jego wielką zaletą jest to, że jest dostarcza-
ny wraz z dystrybucją (jest częścią środowiska KDE). Jeśli
więc korzystamy z KDE, to KCron jest już w systemie. Jeśli
zaś jesteśmy szczęśliwymi użytkownikami GNOME, to nic nie
stoi na przeszkodzie, aby również skorzystać z tego progra-
mu. KCron znajduje się w pakiecie kdeadmin, jeśli więc nie
mamy go zainstalowanego, to konieczna będzie jego instala-
cja wraz z zależnościami (m.in. pakiety kdebase, kdelibs oraz
lm_sensors).
Po uruchomieniu programu z poziomu zwykłego użytkow-
nika uzyskujemy dostęp do naszego pliku crontab umiesz-
czonego w /var/spool/crontab/. W głównym oknie mamy do
wyboru pola Tasks oraz Variables. Pole Variables odpowiada
za zmienne środowiskowe, natomiast pole Tasks to właściwe
zadania do wykonania wraz z terminami.
Wskazując prawym przyciskiem myszy pole Tasks,
a następnie wybierając z rozwiniętego menu opcję New, prze-
chodzimy do tworzenia nowego zadania. Pierwsze pole to
komentarz dotyczący nowego zadania (w pliku crontab znaj-
dzie się tuż nad linią z zadaniem). W drugim polu, Program,
możemy wpisać treść polecenia lub nazwę skryptu do wyko-
nania. Możemy też skorzystać z przycisku Browse w celu
wskazania pliku programu, który chcemy wykonać. Pole Ena-
bled zostawiamy włączone, a Silent wyłączone (z Vixie Cron
działa niepoprawnie). Pozostaje nam wskazanie wybranych
miesięcy, dni miesiąca, dni tygodnia, godzin i minut. Możemy
skorzystać z pola Run every day, co spowoduje automatycz-
ne zaznaczenie wszystkich wartości miesięcy, dni miesiąca
i dni tygodnia. Niestety brakuje znanej z Webmina możliwo-
ści wybrania wartości @reboot. Zmiany zatwierdzamy przy-
ciskiem OK.
Jeśli nie odpowiada nam ustawienie jakiegoś zadania,
możemy je wskazać prawym przyciskiem myszy i wybrać
opcję Modify. Pozwoli to na poprawienie ustawień korzystając
z takiego samego okna, jak przy tworzeniu nowego zadania.
Analogicznie do zadań możemy dodać lub zmodyfiko-
wać zmienne środowiskowe. Wystarczy w polu Variables lub
na istniejącej zmiennej wskazać prawym przyciskiem myszki,
a następnie wybrać New lub Modify. W otwartym oknie wpisu-
jemy (lub wybieramy z listy) nazwę zmiennej, a poniżej wpisu-
jemy jej wartość. Pole Comment pozwala nam wpisać komen-
tarz dotyczący tej zmiennej. Oczywiście pozostawiamy pole
Enabled zaznaczone, po czym wciskamy OK.
Wszelkie zmiany, jeśli mają zacząć obowiązywać,
musimy zapisać wciskając klawisze [Ctrl]+[s].
Jeśli uruchomimy KCron z poziomu użytkownika root, to
będziemy mieli dostęp do plików crontab wszystkich użytkow-
ników w systemie. Plik /etc/crontab ukryty jest pod pozycją
System Crontab.
Rysunek 6.
KCron zapewnia nam wygodny i przyjemny dla oka
interfejs
W Sieci:
• Around the World in eighty days:
http://jv.gilead.org.il/pg/80day/
• VCron:
http://www.linux-kheops.com/pub/vcron/
• Gcrontab:
http://www.arquired.es/users/aldelgado/proy/gcrontab/
• Webmin:
http://www.webmin.com/