background image

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.

background image

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ł.

background image

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.

background image

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: 3710111213
1418192028 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 – 02godzina – 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

background image

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ć!”

background image

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), VcronGcron-
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ść.

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.

background image

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/