W każdym systemie operacyjnym istnieją takie prace, jakie wykonuje się cyklicznie i są powtarzalne. Proces ten nosi nazwę - planowanych działań (job scheduling) i zazwyczaj bazuje na czynnościach zdefiniowanych przez użytkownika. W RedHat narzędziem do automatyzacji i wykonywania powtarzających się czynności jest "cron". Domyślnie RedHat posiada kilka zdefiniowanych prac systemowych jakie można konfigurować czasowo (godzinowo, codziennie, co tydzień, miesięcznie itd).
Krok 1 - Chociaż pakiet "cron" powinien być zainstalowany domyślnie warto jednak sprawdzić czy faktycznie tak jest
cronie-1.4.4-2.el6.x86_64
cronie-anacron-1.4.4-2.el6.x86_64
crontabs-1.10-32.1.el6.noarch
Krok 2 - Jeżeli pakiety nie są zainstalowane zróbmy to teraz
# yum install -y cronie cronie-anacron crontabs
Krok 3 - Sprawdzenie czy usługa "cron" jest uruchomiona
# service crond status
crond (pid 2239) is running...
Krok 4 - Sprawdzamy również czy "cron" uruchamia się wraz z systemem
# chkconfig --list crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Zaczynając pracę z usługą "cron" należy zapoznać się z dwoma plikami konfiguracyjnymi :
- /etc/cron.allow
- /etc/cron.deny
Plik /etc/cron.allow :
- Jeżeli istnieje, tylko ci użytkownicy mają zezwolenie (cron.deny jest ignorowany)
- Jeżeli nie istnieje, wszyscy użytkownicy mają uprawnienia zgodnie z cron.deny
Plik /etc/cron.deny :
- Jeżeli istnieje i jest pusty, wszyscy użytkownicy mają zezwolenie
- Jeżeli nie istnieje tylko root może używać cron
TWORZENIE ZADAŃ W CRON
Domyślnie w RedHat wszyscy użytkownicy są uprawnieni do korzystania z narzędzia "cron". W celu otworzenia nowego zadania posługujemy się poleceniem "crontab".
Składnia polecenia crontab : # crontab [-u user] [opcje]
Opcje polecenia crontab:
- -e - Edycja użytkownika crontab
- -l - Lista użytkowników crontab
- -r - Usunięcie użytkownika z crontab
- -i - Komunikat przed usunięciem użytkownika z crontab
Zanim zaczniesz używać polecenia crontab zapoznaj się z stosowanym formatem zapisu zadań. Każdy z użytkowników posiada swój plik crontab w /var/spool/cron (plik ten tworzony jest w momencie pierwszego użycia polecenia crontab). Wszystkie akcje posiadają własne logi zapisywane w /var/log/cron.
By zrozumieć składnie crontab zobaczmy plik /etc/crontab:
# grep ^# /etc/crontab
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,etc.
# | | | | |
# * * * * * command to be executed
By dokładniej pokazać o co w tym chodzi stworzymy proste zadanie w katalogu /tmp
Przykładowy skrypt do wykonywania w cron :
# vi /tmp/sample_script
#!/bin/bash
#
# Send a msg to all users on the console
#
wall “Hello World”
Zapisujemy plik i nadajemy uprawnienia do wykonywania go :
# chmod 775 /tmp/sample_script
Teraz zajmiemy się dodaniem nowego zadana do usługi cron. Ponieważ działamy jako użytkownik root nadamy prace crontab dla zwykłego użytkownika User01.
Krok 1 - Ustawienie crontab dla User01
# crontab -u user01 -e
Krok 2 - Dodanie linii
* * * * * /tmp/sample_script
Krok 3 - Zapis pliku i wyjście z edytora
Ponieważ testowo wszędzie użyliśmy symbolu "*" skrypt będzie wykonywał się co 60 sekund wyświetlając napis na ekranie "Hello World".
Krok 4 - Sprawdzenie jakie zadania cron wykonuje User01
# crontab -u user01 -l
* * * * * /tmp/sample_script
Krok 5 - Usunięcie zadań crontab dla User01
# crontab -u user01 -r
Krok 6 - Można sprawdzić aktywność crontab podglądając zawartość pliku logu.
# tail /var/log/cron
Sep 10 09:08:01 new-host crond[4213]: (user01) CMD
(/tmp/sample_script)
Sep 10 09:08:38 new-host crontab[4220]: (root) LIST (user01)
Sep 10 09:09:01 new-host crond[4224]: (user01) CMD
(/tmp/sample_script)
Sep 10 09:10:01 new-host crond[4230]: (user01) CMD
(/tmp/sample_script)
Sep 10 09:11:01 new-host crond[4236]: (user01) CMD
(/tmp/sample_script)
Sep 10 09:12:01 new-host crond[4242]: (user01) CMD
(/tmp/sample_script)
Sep 10 09:13:01 new-host crond[4248]: (user01) CMD
(/tmp/sample_script)
Sep 10 09:13:06 new-host crontab[4251]: (root) LIST (user01)
Sep 10 09:14:01 new-host crond[4253]: (user01) CMD
(/tmp/sample_script)
Sep 10 09:14:15 new-host crontab[4258]: (root) DELETE (user01)
Widać, że wykonywany był skrypt /tmp/sample_script oraz że użytkownik root wyłączył jego wykonywanie.
W wydaniu RHEL5 plik /etc/crontab, który używany jest z użytkownika root różni się nieco od formatu jaki posiadają zwyczajni użytkownicy systemu. Plik /etc/crontab posiada dodatkowe miejsce pomiędzy ustawieniami czasu, a właściwym poleceniem do wykonania i w miejscu tym musimy zdefiniować, z jakiego użytkownika to konkretne polecenie będzie wykonywane.
# cat /etc/crontab
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
Tutaj użytkownik root zdefiniowany został dla potrzeb specyficznych poleceń. Miejsce na wpisywanie użytkownika w crontab jest opcją w RHEL6.
Jak myślisz czy stanie się coś jeżeli cron ustawiono tak by pracował całą noc nad przygotowaniem jakiegoś raportu, a ty wyłaczysz komputer po powrocie do domu? Okazuje się, iż własnie przedstawię kolejną ważną cechę cron. W pliku /etc/anacrontab definiowane są zadania jakie mają zostać wykonane za każdym razem gdy system zostanie uruchomiony. Jeżeli system zostanie wyłaczony w momencie pracy cona po uruchomieniu zostaną ponowanie wywołane usługi /etc/anacrontab by mieć pewność że wszystkie niedokończone zadania zostały zrealizowane.
Zobaczmy plik /etc/anacrontab :
Zobaczmy plik /etc/anacrontab :
# cat anacrontab
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthlyKomentarze zawarte w pliku pozwalają łatwo zrozumieć jego zadanie.
Najlepsze narzędzie do konfiguracji backup-ów w Linux-ie.
OdpowiedzUsuńFajny opis.