Jest to ciąg dalszy ze strony ZARZĄDZANIE.
Demon CRON ma za zadanie włączanie innych demonów, programów, skryptów itp. w określonym czasie.
CRON jest umieszczony w pliku /usr/sbin/crond i współpracuje z plikiem konfiguracyjnym /etc/crontab.
*
Zaloguj się w powłoce tekstowej jako root i
wyedytuj plik /etc/crontab. Oczywiście zanim zaczniesz w nim
grzebać, możesz dla własnego komfortu skopiować go do np. katalogu
rezerwa.
Plik /etc/crontab można edytować i usuwać w zwykły, standardowy
sposób, ale można też użyć kilku zleceń specjalnych:
crontab -e (edytuje plik crontab za
pomocą edytora sprecyzowanego w zmiennej PATH)
crontab -l (wyświetla plik crontab
za pomocą edytora sprecyzowanego w zmiennej PATH)
crontab -r (usuwa plik
crontab)
Powinieneś odnaleźć w pliku /etc/crontab wiersz podobny
do poniższego:
00 4,16 * * * root /usr/share/msec/security.sh
Oznacza to, że (patrząc od lewej) o zerowej minucie, w 4
godzinie oraz 16 godzinie, w każdy dzień miesiąca,
każdy miesiąc, każdy dzień tygodnia - plik
/etc/ crontab uruchomi jako użytkownik root polecenie
security.sh.
*/1 * * * 1,2,4,5,6,7 root /etc/rc.d/rc.sditest
Użytkownik root uruchamia plik rc.sditest co minutę we wszystkie
dni tygodnia poza środą - 3. Uwaga: dni (w ostatnim segmencie) liczymy od
niedzieli, która ma wartość = 0 lub 7, poniedziałek = 1, wtorek =
2, środa = 3, czwartek = 4, piątek = 5, sobota = 6.
* * * * * root /etc/rc.d/rc.sditest
(uruchomienie pliku rc.sditest co minutę, we wszystkie dni
tygodnia)
*/15 * * * * root /etc/rc.d/rc.sditest
(czyli uruchomienie pliku rc.sditest co 15 minut)
00-55/5 * * * * root /sbin/rmmod -a
(czyli co 5 minut przez całą dobę)
00 00,04,08,12,16,20 * *
* root /etc/rc.d/rc.sditest (co 4 godziny)
00 00-23/4 * *
* root /etc/rc.d/rc.sditest (j.w. - co 4 godziny)
00 15 * * 5 /bin/mail -s "Zaczyna sie weekend.
Koniec pracy nadgorliwcze!" antek
Użytkownik antek otrzyma
w każdy piątek komunikat przypominający, że w życiu nie liczy się
tylko praca ;)
Można też startować serwer apache (httpd), by działał codziennie
od godziny 8 rano do 22 wieczorem:
00 08 * * * root /etc/rc.d/init.d/httpd
start
00 22 * * * root /etc/rc.d/init.d/httpd
stop
*
Aby zrozumieć jak działa demon cron,
proponuję mały eksperyment: zlecimy zadanie kopiowania kilku plików
z logami serwerów (np. httpd, proftpd), co 30 minut na Desktop
użytkownika antek. Wyedytuj plik /etc/crontab i wstaw
na końcu kilka nowych linijek:
17,47 * * * * root cp -f /var/log/proftp.log /home/antek/Desktop/aaproftpd.txt
18,48 * * * * root cp -f /etc/httpd/logs/access_log /home/antek/Desktop/aa1.txt
19,49 * * * * root chown antek.antek /home/antek/Desktop/aa*.txt
Co oznaczają powyższe wpisy? Co 30 minut, czyli w 17 oraz 47
minucie, każdej godziny, w każdy dzień
miesiąca, każdy miesiąc, każdy dzień tygodnia -
plik /etc/crontab uruchomi jako root polecenie
cp. Parametr -f oznacza, że kopiowanie odbędzie się
bez pytania o zgodę na nadpisywanie. Ostatni wiersz zamieni prawa
właściciela z roota na antka, gdyż chcemy temu użytkownikowi
umożliwić swobodne czytanie i przerabianie kopii plików
systemowych. Nazwy kopii zaczynają się od aa dla naszej
własnej wygody. Ten znak szczególny ułatwi w przyszłości
sortowanie.
Przykład pliku /etc/crontab z
Mandrake 9.0
*
Zamiast wpisywać dane do pliku /etc/crontab, można
skorzystać z możliwości jakie niesie katalog /etc/cron.d .
Umożliwia on łatwe uruchamianie zadań poprzez umieszczenie w nim
prostego pliku tekstowego o dowolnej nazwie (np. rc.sditest), a zawierającego jeden wiersz typu
np.
*/1 * * * * root /etc/rc.d/rc.sditest
*
Uwaga: czasami cron zachowuje się
pozornie nieracjonalnie i nie zawsze teoretycznie poprawne
wpisy zadziałają.
- Pliki które chcesz kopiować (skryptem odpalanym przez CRON), powinny mieć prawidłową nazwę (bez
myślników, spacji np. tojestnazwapliku), gdyż wpis w
/etc/crontab może nie zadziałać.
- Jeżeli przykładowy wpis:
*/15 * * *
* root tar -zcf /home/antek/Desktop/`date
+%Y.%m.%d.%H.%M.%S`.tar /var/log w pliku /etc/crontab
nie zadziała, to utwórz skrypt o nazwie rc.archiw
(zawierający to polecenie):
#!/bin/sh */15 * * *
* root tar -zcf /home/antek/Desktop/`date
+%Y.%m.%d.%H.%M.%S`.tar /var/log
Umieść skrypt w katalogu /etc/rc.d/ . Nadaj mu prawo do wykonywania (zleceniem cd /etc/rc.d oraz chmod a+x rc.archiw). Do pliku /etc/crontab wpisz (na końcu) wiersz:
*/15 * * * * root /etc/rc.d/rc.archiw
- Zauważyłem, że w pliku /etc/crontab nie powinno się
umieszczać poleceń na dokładnie tą samą minutę dla kilku
zadań.
- Teoretycznie poprawny wpis typu:
*/1 * * * * root /etc/rc.d/rc.sditest nie zawsze działa. W
takim przypadku wypróbuj: * * * * * root /etc/rc.d/rc.sditest lub... utwórz katalog
/etc/cron.minutowy (na styl /etc/cron.hourly) i tam umieść
pliki odpalające crona.
- Czasami zmuszałem crona do działania umieszczając przykładowy
wpis typu:
* * * * * root /etc/rc.d/rc.sditest w pliku
/etc/crontab , czasami w /etc/cron.hourly/* , a
czasami w /etc/cron.d/* Niestety, do dziś nie rozumiem,
dlaczego w jednym przypadku wpis zadziałał, a w innym nie...
- Powyżej przedstawiłem możliwości crona polegające na regularnym
kopiowaniu plików. Trzeba pamietać, że nie wszystkie pliki dadzą
się skopiować za pomocą polecenia w pliku umieszczonym wewnątrz
katalogu /etc/cron.hourly/* (hourly, daily itd.). Takie
zadanie wykona jedynie plik /etc/crontab , gdyż ma on
możliwość wskazania użytkownika (w tym przypadku roota), pod jakim
trzeba wykonać daną czynność. Plik crona umieszczony w
/etc/cron.hourly/* poradzi sobie dopiero, gdy w kopiowanym
(przez crona) pliku będzie prawo do odczytu dla INNYCH. Stąd gdybyś
chciał kopiować plik np. /etc/hosts.deny to w pierwszej
kolejności będziesz musiał nadać mu prawo do odczytu dla INNYCH
(standardowo, ze względów bezpieczeństwa, wobec tego pliku, Mandrake/Mandriva
nie nadaje takich praw). Dopiero prawa -rw-r--r-- zamiast -rw-r----- umożliwią kopiowanie pliku do katalogu
/home/antek/Desktop za pomocą pliku
/etc/cron.hourly/kopienadesktopantka
- Uwaga: zalecanym jest używanie powłoki BASH do pisania skryptów, szczególnie tych współpracujących z autostartem, czyli plikami /etc/rc/* oraz .cronrc.
- Mając bardzo stary komputer, możesz napotkać na problem złej
daty w BIOSie podczas instalowania systemu. Data utworzenia plików
jest wtedy np. 1900 rok i... powstają błędy podczas pracy systemu i
np. crona.
Oto przykład wpisu informującego o błędzie:
/etc/cron.daily/logrotate:
error: bad year 1990 for file /var/log/messages
in state file /var/lib/logrotate.status
/etc/cron.daily/tripwire-check:
**** Error: Tripwire database for wv42.internetdsl.tpnet.pl
not found. ****
**** Run /etc/tripwire/twinstall.sh and/or tripwire --init.
****
*
Jeżeli przyjrzałeś się plikowi /etc/crontab , to
zauważyłeś, że twórcy Mandrake wymyślili dodatkowe możliwości
ruchamiania poleceń. Mam tu na myśli zawartość katalogów
/etc/cron.daily , /etc/cron.hourly itd. Jak się
domyślasz odpowiadają one za uruchomienie poleceń odpowiednio: raz
dziennie, co godzinę itd.
Tworzymy więc w katalogu /etc/cron.hourly plik o dowolnej
nazwie np. kopienadesktopantka i nadajemy mu prawa
-rwxr-xr-x root.root (przypominam składnię: chmod 755 nazwa_pliku oraz chown
root.root nazwa_pliku) . Umieścimy tam następujący wpis:
cp -f /var/log/proftp.log /home/antek/Desktop/aaproftpd.txt
I tak po kolei tworzymu sobie pliki zawierające po jednym
wierszu:
cp -f /etc/httpd/logs/access_log /home/antek/Desktop/aahttp.txt
chown antek.antek /home/antek/Desktop/aa*.txt
Jak nie zadziała, to dopisz na początku wiersz: #!/bin/bash , co zamieni zwykły plik tekstowy na
skrypt.
Możesz wzorem twórców Mandrake wykonać swój katalog o dowolniej
nazwie np.: /etc/cron.15min , nadać mu prawa jak wobec
katalogu /etc/cron.hourly (czyli root.adm 750) i
wpisać do /etc/crontab wiersz:
0-59/15 * * * * root run-parts
/etc/cron.15min
Od teraz, umieszczając w nim skrypty będziesz miał działanie
podobne jak w /etc/cron.hourly , /etc/cron.daily
itp.
Istnieje mała różnica
w zawartości wspomnianych katalogów: w Mandrake 8.1 powinien być
tam umieszczony plik "odpalający" Oanacron. W Mandrake 9.x, 10.x oraz Mandriva nie ma
potrzeby używania go.
Ponieważ w Mandrake 8.1 katalog
/etc/cron.hourly jest domyślnie pusty i nie ma w nim
wspomnianego pliku Oanacron - trzeba
go ręcznie utworzyć lub (co wygodniejsze) skopiować z innego
katalogu np /etc/daily i lekko przerobić (będziemy mieli z
głowy problem ustawienia praw). Ostateczny wygląd pliku
/etc/cron.hourly/Oanacron (w Mandrake 8.1) o prawach
-rwxr-xr-x root.root (przypominam składnię nadawania praw:
chmod 755 nazwa_pliku oraz chown root.root
nazwa_pliku) powinien wyglądać tak:
#!/bin/sh
anacron -u cron.hourly
W Mandrake 9.x, 10.x oraz Mandriva nie potrzeba "odpalacza", możemy od razu
przejść do utworzenia odpowiednio przygotowanego pliku tekstowego
zawierającego polecenie. Umieścimy go w katalogu
/etc/cron.hourly (lub daily itp.). Plik ten może być użyty
zarówno w Mandrake 8.1 jak i 9.0 oraz Mandriva.
*

Wszelkie prawa są zastrzeżone, z wyłączeniem hobbystów, którzy umieszczają opracowania na stronach bez reklam. Dla hobbystów zawartość tej strony jest dostępna bez ograniczeń - używanie i przerabianie moich artykułów są jak najbardziej wskazane, ale na swoją odpowiedzialność.
Aby uniknąć zasysania całej witryny gorzow-wlkp.pl/linux za pomocą programów typu TeleportPro, WebCopier itd. informuję, że udostępniłem spakowaną wersję (w formacie RAR).
|