Pliki crontab
Cron jest programem służącym do periodycznego uruchamiania poleceń lub skryptów. Crontab to natomiast aplikacja do zarządzania plikami zawierającymi reguły dla crona. Pliki te nazywa się niekiedy tabelami, bo umieszczane w nich poszczególne wpisy mają tę samą strukturę: składają się z sześciu pól oddzielonych spacjami lub tabulatorami – pięciu z określeniami czasu wykonania danego polecenia oraz szóstego zawierającego już samo polecenie. Każdy użytkownik może mieć taki indywidualny plik z własnym zestawem reguł. Crond to uniksowy demon, który budzi się co minutę, czyta reguły z plików crontab i w razie potrzeby uruchamia stosowne polecenia.
Demon crond pracuje w tle i wykonuje zadania zlecone mu w plikach z katalogu /var/spool/cron/crontabs. Każdy użytkownik może mieć tam swój indywidualny plik z zadaniami (jego nazwa jest taka sama jak nazwa konta tego użytkownika).
Wspomniany demon przegląda swe listy zadań na początku każdej minuty. Są one przechowywane w pamięci i mogą liczyć nawet tysiące pozycji. Inaczej ma się sprawa z długością pojedynczego wpisu – nie powinien on przekroczyć 1024 znaków. Nic nie stoi jednak na przeszkodzie, aby zlecać demonowi wykonywanie uprzednio przygotowanych skryptów, które mogą być dowolnie długie.
Informacje o zadaniach zleconych cronowi przez danego użytkownika są przechowywane w pliku /var/spool/cron/crontabs/użytkownik. Przejrzymy je, wydając polecenie crontab -l, a zmienimy po wydaniu polecenia crontab -e. Ta ostatnia komenda uruchamia edytor vi z otworzonym do edycji właściwym dla danego użytkownika plikiem crontab. Inną metodą modyfikacji listy zadań jest wczytanie jej z pliku poleceniem crontab plik. W takim przypadku zadania z pliku zastąpią te, które były dotychczas zarejestrowane w crontabie. Tę metodę modyfikowania zadań crona polecamy użytkownikom niekorzystającym z programu vi na co dzień. Nie zaleca się natomiast bezpośredniego modyfikowania listy zadań crona z wykorzystaniem popularnych edytorów, bo w takim przypadku demon crond nie jest powiadamiany o tym, że lista ta uległa zmianie, i uwzględnia nowe zadania dopiero po kolejnym uruchomieniu systemu. Polecenie crontab -d powoduje usunięcie pliku crontab, którego właścicielem jest dany użytkownik.
Program crontab ma przypisany bit SUID, dzięki czemu każdy użytkownik systemu może zlecać demonowi crond własne zadania. Jeżeli ze względów bezpieczeństwa systemu pozbawiamy poszczególne programy bitu SUID, a nie chcemy odbierać użytkownikom dostępu do crona, możemy zarejestrować ich wszystkich w pliku konfiguracyjnym programu sudo, czyli w /etc/sudoers, lub założyć specjalną grupę dla tych, którzy mają mieć dostęp do crontaba, i przypisać tę grupę programowi crontab.
W zadaniach zlecanych cronowi możemy w razie potrzeby odwoływać się do przejmowanych z powłoki trzech zmiennych globalnych, w ramach której program ten został uruchomiony: $USER, $HOME oraz $SHELL.
Cron przejdzie powtórnie do zadania wykonywanego periodycznie dopiero wówczas, gdy poprzedni proces zostanie zakończony. Jeżeli jakieś zadanie zabiera mu półtorej minuty, to, mimo że każemy cronowi uruchamiać je raz na minutę, będzie on w stanie zrobić to jedynie co dwie minuty, chyba że zlecone zadanie będzie wykonywane w tle.
Zlecenia dla crona
Pojedyncze zlecenie dla crona ma postać:
minuta godzina dzień_miesiąca miesiąc dzień_tygodnia polecenie
Nie wszystkie pola muszą przyjmować jakieś określone wartości – gwiazdka oznacza wartość dowolną. Najprostszy wpis w crontabie ma postać:
* * * * * polecenie
Spowoduje on, że nasze polecenie będzie wykonywane w każdej minucie każdej godziny każdego dnia.
Często wykorzystuje się tak określone zadanie do monitorowania poprawności pracy demona crond poprzez umieszczenie w /var/spool/cron/crontabs/root zlecenia:
* * * * * touch /tmp/.crond_running
W rezultacie czas utworzenia pliku /tmp/.crond_running powinien się zmieniać co minutę, co będzie świadczyło o tym, że crond jest aktywny i wykonuje zadania z /var/spool/cron/crontabs.
Podajmy jeszcze kilka przykładów:
0 * * * * polecenie1 30 8 * * * polecenie2 55 23 31 * * polecenie3 0 0 1 jan * polecenie4 30 15 * * mon-fri polecenie5 */15 * * * * polecenie6 0 8-16/2 * * * polecenie7 0 12 * * mon,wed,fri polecenie8 * * * * 0 /usr/local/bin/skrypt
Pierwsze polecenie będzie wykonywane o każdej pełnej godzinie, drugie codziennie o 8.30, trzecie każdego 31. dnia miesiąca o 23.55, czwarte pierwszego stycznia o północy, piąte w dni robocze o 15.30, szóste co kwadrans, siódme co dwie godziny między ósmą a szesnastą, ósme w wybranych dniach w południe, a dziewiąte będzie uruchamiało wskazany skrypt co minutę w każdą niedzielę.
Zamiast podawać skróty nazw dni tygodnia, możemy stosować wartości liczbowe z zakresu 0–6, pamiętając przy tym, że tydzień zaczyna się od niedzieli, wyrażonej liczbowo jako 0. Taka właśnie wartość została wpisana w polu dnia tygodnia w naszym ostatnim przykładzie.
Jeżeli użytkownik tworzący przytoczony tu plik crontab chciał, aby trzecie z kolei polecenie było uruchamiane ostatniego dnia każdego miesiąca, to nie osiągnie on swego celu w ten sposób, ponieważ nie każdy miesiąc liczy trzydzieści jeden dni. W tym przypadku trochę lepszym rozwiązaniem byłoby zadanie zlecenia:
55 23 28,29,30,31 * * polecenie3
Jego wadą jest jednak to, że spowoduje ono wykonanie tego polecenia nie tylko każdego ostatniego , ale także przedostatniego dnia miesiąca (oprócz lutego w roku nieprzestępnym).
W niektórych Uniksach używa się ponadto tabeli systemowej zawartej w pliku /etc/crontab. Poszczególny wpis w tym pliku składa się z siedmiu pól: pięciu z określeniem czasu wykonania polecenia, szóstego z nazwą użytkownika, w imieniu którego polecenie jest uruchamiane, oraz z siódmego z treścią polecenia.
Ładowanie





Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7