CRON(8)

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

SKŁADNIA

cron [-f] [-l] [-L poziom-komunikatów] [-n fqdn] [-x flagi-debugowania]

cron [-N]

OPIS

cron jest wywoływany bezpośrednio przez systemd(1) 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.

-n fqdn
    Przy wysyłaniu poczty, w temacie umieszczona zostanie w pełni kwalifikowalna nazwa domeny (FQDN). Domyślnie cron skraca nazwę komputera.

-N
    Uruchamia zadanie cron Natychmiast i wychodzi. Opcja przydatna do testów.

-L poziom-komunikatów
    Wybiera, jakie informacje o zadaniach mają być zapisywane przez cron 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.

-x flagi-debugowania
    Nakazuje programowi cron wyświetlać więcej i bardziej szczegółowo informacje debugowania; flagi-debugowania są sumą następujących wartości:

    1
        "ext": ...

    2
        "sch": ...

    4
        "proc": ...

    8
        "pars": ...

    16
        "load": ..

    32
        "misc": ...

    64
        "test": ...

    128
        "bit": ...

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

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. Administrator systemu może tworzyć zadania crona w /etc/cron.d/ z nazwami takimi jak "local" albo "local-foo".

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) od właściciela pliku crontab (lub z adresu poczty elektronicznej podanego w zmiennej środowiskowej MAILFROM 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(1).

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/localtime.

Środowisko może zostać przedefiniowane 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 programu cron, 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(8), podając każdy z tych katalogów jako argument. Zadania są wyłączane, jeśli zainstalowany jest anacron(8) (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(8): 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(8). 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, .dpkg-old 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(8).

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)

AUTORZY

Paul Vixie <paul@vix.com>
    Autor niniejszej strony podręcznika (1994).

Steve Greenland <stevegr@debian.org>
    Opiekun pakietu (1996-2005).

Javier Fernández-Sanguino Peña <jfs@debian.org>
    Opiekun pakietu (2005-2014).

Christian Kastner <ckk@debian.org>
    Opiekun pakietu (2010-2016).

Georges Khaznadar <georgesk@debian.org>
    Opiekun pakietu (2022-2024).

PRAWA AUTORSKIE
Copyright © 1994 Paul Vixie

Można dystrybuować dowolnie, z następującymi zastrzeżeniami: nie usuwaj moich danych ze źródeł ani dokumentacji (nie przypisuj sobie mojej pracy), oznaczaj swoje zmiany (abym nie był obwiniany za błędy, które mogłeś wprowadzić), nie zmieniaj [oryginalny tekst licencji jest dostępny w angielskiej wersji podręcznika — przyp. tłum.], ani nie usuwaj niniejszego zastrzeżenia. Może być sprzedawany, jeśli źródła służące do jego zbudowania są przekazywane kupującemu. Niniejsze oprogramowanie jest pozbawione jakiejkolwiek gwarancji, jawnej lub dorozumianej; używasz na własne ryzyko, odpowiedzialność za (potencjalne) szkody spoczywa w całości na użytkowniku.

Od 1994 roku, Deweloperzy Debiana opiekujący się cronem dokonali wielu zmian w niniejszym podręczniku; wyżej wykazano skróconą listę, więcej informacji znajduje się w pliku /usr/share/doc/cron/copyright.

TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika: Przemek Borys <pborys@dione.ids.pl> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.