HOME


 
Jeżeli ładowanie trwa zbyt długo (powyżej 2 min.), to zapraszam o innej porze.
Zobacz statystyki odwiedzin by ustalić porę najmniejszego obciążenia serwera.

Spakowana witryna o Linuksie w formacie RAR
 
gorzow-wlkp.pl/linux
Automatyczne uruchamianie poleceń o określonych porach
za pomocą demona cron


 
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.

 

*

 


 
twarogal@wp.pl

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

 




 

gorzow-wlkp.pl