CRON(8)

NAZWA
cron - demon do wywoływania odłożonych poleceń (Vixie Cron)

SKŁADNIA
cron [-f] [-l] [-L poziom-komunikatów]

OPIS
cron jest uruchamiany automatycznie z /etc/init.d, przy wchodzeniu w poziom pracy wielu użytkowników.

OPCJE

-f  Pozostaje w trybie pierwszoplanowym, nie staje się demonem.

-l  Włącza zgodność nazw plików w katalogu /etc/cron.d z LSB. To ustawienie nie wpływa jednak na przetwarzanie plików w katalogach /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly lub /etc/cron.monthly.

-L poziom-komunikatów
    Wybiera, jakie informacje o zadaniach mają być zapisywane do dziennika (błędy są logowane niezależnie od tej wartości). Jest to suma poniższych wartości:

    1   zapisuje uruchomienie wszystkich zadań crona

    2   zapisuje koniec wszystkich zadań crona

    4   zapisuje wszystkie zadania zakończone niepowodzeniem (kod zakończenia różny od 0)

    8   zapisuje numer procesu wszystkich zadań crona

    Domyślnie zapisywane jest uruchomienie wszystkich zadań (1). Logowanie jest wyłączane, jeśli poziom-komunikatów jest ustawiony na zero (0). Wartość równa piętnaście (15) wybierze wszystkie opcje.

UWAGI

cron przeszukuje swój katalog spool (/var/spool/cron/crontabs) w poszukiwaniu plików crontab (które są nazwane zgodnie z kontami w /etc/passwd); odnalezione pliki są następnie ładowane do pamięci. Proszę zauważyć, że pliki crontab w tym katalogu nie powinny być osiągane bezpośrednio - do ich aktualizacji i dostępu powinno być używane polecenie crontab. cron odczytuje również /etc/crontab, które posiada nieco inny format (patrz crontab(5)). W Debianie, zawartość /etc/crontab jest predefiniowana do uruchamiania programów w katalogach /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly i /etc/cron.monthly. Konfiguracja ta jest charakterystyczna dla Debiana, proszę zapoznać się z opisem w poniższym rozdziale ZMIANY ODNOSZĄCE SIĘ DO DEBIANA. Dodatkowo, w Debianie, cron odczytuje pliki w katalogu /etc/cron.d. cron traktuje pliki w /etc/cron.d w ten sam sposób, jak w pliku /etc/crontab (przestrzegają one specjalnego formatu tego pliku, np. zawierają pole user). Są one jednak niezależne od /etc/crontab: nie dziedziczą np. ustawień zmiennych środowiskowych z wspomnianego pliku. Zmiana ta jest charakterystyczna dla Debiana - patrz ZMIANY ODNOSZĄCE SIĘ DO DEBIANA. Podobnie jak /etc/crontab, pliki w katalogu /etc/cron.d są monitorowane w poszukiwaniu zmian. Ogólnie, administrator systemu nie powinien używać /etc/cron.d/, lecz standardowego pliku /etc/crontab. Plik /etc/crontab i pliki w /etc/cron.d muszą był własnością roota i nie mogą być zapisywalne dla grupy lub innych. W odróżnieniu od katalogu spool, pliki w katalogach /etc/cron.d oraz /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly i /etc/cron.monthly mogą być również dowiązaniami symbolicznymi pod warunkiem, że zarówno samo dowiązanie jak i plik na który ono wskazuje, są własnością roota. Pliki w katalogu /etc/cron.d nie muszą być wykonywalne, natomiast pliki w katalogach /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly i /etc/cron.monthly - muszą, ponieważ są uruchamiane przez run-parts (patrz podręcznik run-parts(8)). Program cron budzi się co minutę, sprawdzając wszystkie pliki crontab i sprawdzając, czy poszczególne polecenia nie muszą być wykonane w bieżącej minucie. Po wykonaniu poleceń, ich ewentualne wyjście jest wysyłane pocztą do właściciela pliku crontab (lub do użytkownika ze zmiennej środowiskowej MAILTO z pliku crontab, jeśli taka istnieje). Kopie potomne crona, które wykonują te procesy, mają ich nazwy zapisane wielkimi literami, jak to widać w wyniku poleceń syslog i ps.

Dodatkowo, cron sprawdza co minutę, czy czas modyfikacji swojego katalogu spool (lub pliku /etc/crontab) nie zmienił się, a jeśli tak się stało, to cron sprawdza czasy modyfikacji wszystkich plików crontab i przeładowuje te z nich, które się zmieniły. Z tego powodu cron nie musi być restartowany po modyfikacji plików crontab. Proszę zauważyć, że polecenie crontab(1) aktualizuje czas modyfikacji katalogu spool, niezależnie od tego, czy zmodyfikował plik crontab.

Specjalnym przypadkiem jest, gdy czas zmieni się o mniej niż 3 godziny, np. na początku lub końcu obowiązywania czasu letniego. Jeśli czas przesuwa się do przodu, to zadania, które byłyby uruchomione w czasie, który został przesunięty, są uruchamiane zaraz po wystąpieniu zmiany. I na odwrót - jeśli czas przesunie się do tyłu o mniej niż 3 godziny, to zadania, które przypadają w powtórzonym czasie, nie będą uruchamiane ponownie.

Tyczy się to wyłącznie zadań wykonywanych w określonym czasie (niepodanych jako @hourly, ani nie używających "*" jako określenia godziny lub minuty). Zadania, które są podawane z wieloznacznikiem, są uruchamiane od razu na podstawie nowego czasu.

Zmiany zegara o więcej niż 3 godziny, są uważane za poprawki zegara i od razu używany jest nowy czas.

Program cron zapisuje swoje działania do właściwości "cron" sysloga, a logowanie może być kontrolowane przy użyciu standardowej właściwości syslogd(8).

ŚRODOWISKO
Jeśli zmienne środowiskowe lokalizacji (regionalne) w systemie Debian, w katalogu /etc/default/cron, zostaną skonfigurowane, to można nimi zarządzać używając /etc/environment albo za pomocą /etc/default/locale, przy czym wartości z drugiego pliku przesłaniają te z pierwszego. Pliki te są odczytywane i są używane do ustawienia zmiennych środowiskowych LANG, LC_ALL i LC_CTYPE. Zmienne te są używane do ustawienia kodowania poczty elektronicznej, przy czym domyślnie wynosi ono "C".

NIE wpływa to na środowisko zadań uruchamianych przez cron. Więcej informacji o modyfikowaniu środowiska zadań zawiera strona podręcznika crontab(5).

Demon będzie używał, jeśli jest obecna, definicji strefy czasowej z pliku /etc/timezone.

Środowisko może zostać przefediniowane przez definicje z plików crontab użytkownika, lecz cron obsługuje wykonywanie zadań jedynie w pojedynczej strefie czasowej.

ZMIANY ODNOSZĄCE SIĘ DO DEBIANA

Debian wprowadził pewne zmiany do crona, które nie były dostępne w oryginale. Najważniejsze zmiany to:

—   obsługa /etc/cron.{hourly,daily,weekly,monthly} poprzez /etc/crontab,

—   obsługa /etc/cron.d (katalog do umieszczania plików crontab pakietów),

—   obsługa PAM,

—   obsługa SELinux,

—   obsługa auditlog,

—   obsługa DST (czasu letniego) i inne zmiany/poprawki w stosunku do czasu,

—   SGID crontab(1) zamiast SUID root,

—   debianowe położenia plików i polecenia,

—   debianowa konfiguracja (/etc/default/cron),

—   wiele innych mniejszych funkcji i poprawek.

Obsługa /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly i /etc/cron.monthly w Debianie jest zapewniona przez domyślne ustawienia w pliku /etc/crontab (patrz systemowy przykład w crontab(5)). Domyślny, ogólnosystemowy plik crontab zawiera cztery zadania, uruchamiane: cogodzinnie, codziennie, cotygodniowo i comiesięcznie. Każde z tych zadań wykona run-parts, podając każdy z tych katalogów jako argument. Zadania są wyłączane, jeśli zainstalowany jest anacron (z wyjątkiem zadań cogodzinnych) aby zapobiec konfliktom pomiędzy oboma demonami. Jak opisano powyżej, pliki w tych katalogach muszą spełniać kilka warunków, w tym następujące: bycie wykonywalnym, bycie własnością roota, nie mogą być zapisywalne dla grupy lub innych i, jeśli są dowiązaniami symbolicznymi, muszą wskazywać na pliki będące własnością roota. Dodatkowo, nazwy plików muszą spełniać warunki nazw plików programu run-parts: muszą składać się wyłącznie z liter, cyfr i znaków podkreślenia ("_") oraz minusa ("-"). Każdy plik, który nie spełni powyższych wymagań, nie będzie wykonany przez run-parts. Na przykład wszystkie pliki zawierające kropkę, zostaną zignorowane. Celem takiej konfiguracji jest zapobiegnięcie wykonywania przez crona plików, które zostały pozostawione przez debianowy system zarządzania pakietami, podczas obsługi plików w /etc/cron.d/, jako plików konfiguracyjnych (chodzi tu o pliki kończące się na .dpkg-dist, .dpkg-orig i .dpkg-new). Funkcja ta może zostać użyta przez administratorów systemu i pakiety, do zdefiniowania zadań, które mają być uruchamiane w zdefiniowanych interwałach. Pliki tworzone przez pakiety w tych katalogach, powinny być nazywane tak samo, jak dostarczający je pakiet.

Obsługa /etc/cron.d jest dołączona do samego demona cron, który obsługuje ich położenie za pomocą ogólnosystemowego spool crontab. Katalog ten może zawierać każdy plik definiujący zadania, przestrzegający formatu z /etc/crontab - w przeciwieństwie do katalogu spool crona, pliki te muszą zawierać nazwę użytkownika, aby uruchamiać zadania jako definicje zadań. Pliki w tym katalogu muszą być własnością roota, lecz nie muszą być wykonywalne (są to pliki konfiguracyjne, jak /etc/crontab) i muszą przestrzegać tej samej konwencji nazw, jaka jest używana przez run-parts(8): muszą składać się wyłącznie z wielkich i małych liter, cyfr, podkreślników i minusów. Oznacza to, że nie mogą zawierać kropek. Jeśli użyto opcji -l (opcja ta może zostać skonfigurowana za pomocą /etc/default/cron - patrz niżej), to nazwy plików muszą być zgodne z specyfikacją przestrzeni nazw LSB, identycznie jak opcja --lsbsysinit w run-parts. Przeznaczeniem tej funkcji było umożliwienie pakietom, wymagającym dokładniejszej kontroli harmonogramu niż /etc/cron.{hourly,daily,weekly,monthly}, dodawania swoich plików crontab do /etc/cron.d. Pliki te powinny być nazwane tak samo, jak udostępniający je pakiet. Domyślna konfiguracja crona jest kontrolowana przez plik /etc/default/cron, który jest odczytywany przez skrypt init.d, uruchamiający demona cron. Plik ten określa, czy cron będzie czytał systemowe zmienne środowiskowe oraz umożliwia dodawanie dodatkowych opcji do programu cron, przed jego wykonaniem - umożliwiając konfigurację zapisywanego dziennika lub definiowanie sposobu traktowania plików w katalogu /etc/cron.d.

ZOBACZ TAKŻE
crontab(1), crontab(5), run-parts(8)

AUTOR
Paul Vixie <paul@vix.com> jest autorem crona i pierwotnym twórcą tej strony podręcznika systemowego. Niniejsza strona została również zmodyfikowana do Debiana przez Steve'a Greenlanda, Javiera Fernandez-Sanguino i Christiana Kastnera.

TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Przemek Borys (PTM) <pborys@dione.ids.pl> i Michał Kułach <michal.kulach@gmail.com>.

Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 3.0pl1 oryginału.