Provided by: manpages-pl_4.23.1-1_all bug

NAZWA

       crontab - tabele do crona

OPIS

       Plik crontab zawiera wskazówki dla demona cron(8), sformatowane w ogólnej postaci:
       „uruchom tę komendę o tej porze i tego dnia”. Każdy użytkownik ma swoją własną tabelę
       crontab, a komendy z każdej podanej tabeli są wykonywane z uprawnieniami jej właściciela.
       News i uucp zazwyczaj mają swoje własne tabele, eliminując w ten sposób potrzebę jawnego
       wywoływania su(1) jako części komendy crona.

       Proszę zauważyć, że komentarze umieszczone w tym samym wierszu, co polecenie crona, nie są
       interpretowane jako komentarze dla crona, lecz są uważane za część polecenia i są
       przekazywane do powłoki. To stwierdzenie jest prawdziwe również w przypadku komentarzy w
       tym samym wierszu, co ustawienia zmiennej środowiskowej.

       Aktywny wiersz tabeli może być albo ustawieniem środowiska, albo komendą crona. Ustawianie
       zmiennej ma postać

           nazwa = wartość

       gdzie spacje wokół znaku równości (=) są opcjonalne, a wszelkie kolejne, niepoczątkowe
       spacje w wartości zostaną częścią wartości przypisanej zmiennej nazwa. Łańcuch wartość
       może być umieszczony w cudzysłowach (pojedynczych lub podwójnych, lecz jednakowych w
       parze). Zachowa to początkowe i końcowe spacje. Aby zdefiniować pustą zmienną, można
       zastosować cudzysłowy.

       Łańcuch wartość nie jest przetwarzany pod kątem podstawień zmiennych środowiskowych,
       zastąpień zmiennych, czy interpretacji tyldy (~), zatem wiersze takie jak

           PATH=$HOME/bin:$PATH
           PATH=~/bin:/usr/bin

       nie zadziałają zgodnie z oczekiwaniami. Nie zadziała również:

           A=1
           B=2
           C=$A $B

       Ostatnia wartość nie zostanie zastąpiona zdefiniowanymi zmiennymi. W większość powłok
       można spróbować jednak np.:

           P=PATH=/a/b/c:$PATH
           33 22 1 2 3 eval $P && jakieś polecenia

       Wiele zmiennych środowiskowych jest ustawianych automatycznie przez demona cron(8).  SHELL
       jest ustawiany na /usr/bin/sh, LOGNAME i HOME są ustawiane na podstawie wierszy
       /etc/passwd właściciela tabeli crontab. Zmienne HOME i SHELL mogą być przesłonięte przez
       ustawienia w tabeli crontab; nie można tak zrobić z LOGNAME.

       Inna uwaga: zmienna LOGNAME nazywa się czasem USER na systemach BSD... na tych systemach
       ustawiana będzie również zmienna USER.

       Oprócz zmiennych LOGNAME, HOME i SHELL, cron(8) sprawdzi również zmienną MAILTO, jeśli
       będzie miał powód do wysłania wiadomości elektronicznej w wyniku poleceń działających w
       „tym” pliku crontab. Jeśli MAILTO jest zdefiniowana (i nie jest pusta), wiadomość jest
       wysyłana do użytkownika o tej nazwie. Jeśli MAILTO jest zdefiniowana, lecz jest pusta
       (MAILTO=""), poczta nie jest wysyłana. W innych przypadkach wiadomość jest wysyłana do
       właściciela pliku crontab. Opcja ta może się przydać, jeśli jako nadawczy program pocztowy
       użytkownik zdecyduje się korzystać z /usr/bin/mail, zamiast /usr/lib/sendmail/usr/bin/mail nie korzysta z aliasów, a UUCP zwykle nie odczytuje swojej poczty.

       Format komendy crona jest podobny do standardu V7, z wieloma rozszerzeniami. Każdy wiersz
       ma pięć pól czasu i daty, za którymi znajduje się polecenie, kończące się znakiem nowego
       wiersza („\n”). Systemowy plik crontab (/etc/crontab) używa tego samego formatu, z tym
       wyjątkiem, że po czasie i dacie, a przed poleceniem, znajduje się nazwa użytkownika. Pola
       mogą być oddzielone spacjami lub tabulatorami. Maksymalną dozwoloną długością pola
       polecenia jest 998 znaków.

       Polecenia są wywoływane przez demona cron(8), gdy minuta, godzina i miesiąc z wpisu
       odpowiadają czasowi bieżącemu oraz gdy przynajmniej jedno z dwóch pól dnia (dzień miesiąca
       lub dzień tygodnia) odpowiada czasowi bieżącemu (patrz „Uwaga” poniżej). Program cron(8)
       sprawdza wpisy cron co minutę. Pola czasu i daty to:

       ┌───────────────┬───────────────────────────────┐
       │poledozwolone wartości            │
       ├───────────────┼───────────────────────────────┤
       │minuta         │ 0-59                          │
       ├───────────────┼───────────────────────────────┤
       │godzina        │ 0-23                          │
       ├───────────────┼───────────────────────────────┤
       │dzień miesiąca │ 0-31                          │
       ├───────────────┼───────────────────────────────┤
       │miesiąc        │ 0-12 (albo nazwy, zob. niżej) │
       ├───────────────┼───────────────────────────────┤
       │dzień tygodnia │ 0-7 (0 lub 7 jest niedzielą;  │
       │               │ albo nazwy)                   │
       └───────────────┴───────────────────────────────┘

       Pole może mieć gwiazdkę (*), która oznacza „pierwszy-ostatni”.

       Dozwolone są zakresy liczb. Zakresy są dwiema liczbami, oddzielonymi myślnikiem. Zakres
       ten jest domknięty. Na przykład, 8-11 dla „godzin” oznacza wywoływanie w godzinach 8, 9,
       10, 11.

       Dozwolone są też listy. Lista jest zbiorem liczb (lub zakresów), oddzielonych przecinkami.
       Przykłady: „1,2,5,9”, „0-4,8-12”.

       W połączeniu z zakresami można używać wartości krokowych. Napisanie za zakresem elementu
       „/<liczba>” oznacza odstępy między wartościami liczby w zakresie. Na przykład „0-23/2”
       oznacza liczby parzyste w tym zakresie (alternatywą w standardzie V7 jest
       „0,2,4,6,8,10,12,14,16,18,20,22”. Wartości krokowe dozwolone są też za gwiazdkami, więc
       jeśli aby zdefiniować „co drugą godzinę”, można użyć po prostu „*/2”.

       Dla pól „miesięcy” i „dni tygodnia” można używać również nazw. Można użyć pierwszych
       trzech liter konkretnego dnia lub miesiąca (po angielsku, wielkość liter nie ma
       znaczenia). Zakresy lub listy nazw są niedozwolone.

       „Szóste” pole (reszta wiesza) określa polecenie, jaką należy wykonać. Cała część polecenia
       wiersza, aż do nowego wiersza lub znaku %, zostanie wykonana przez /usr/bin/sh, lub przez
       inną powłokę, jaką podano w zmiennej SHELL pliku crona. Procenty w komendzie (%), o ile
       nie są chronione odwrotnymi ukośnikami (\), zostaną zamienione w znaki nowego wiersza, a
       wszelkie dane za pierwszym % zostaną przesłane na standardowe wejście polecenia.

       Uwaga: Dzień wykonania polecenia można podać za pomocą dwóch pól — dnia miesiąca i dnia
       tygodnia. Jeśli oba pola są ograniczone (tj. nie wynoszą *), polecenie zostanie wykonane,
       gdy jedno z nich będzie odpowiadało bieżącej dacie. Na przykład „30 4 1,15 * 5” spowoduje
       wywołanie komendy o 04:30 pierwszego i 15-tego każdego miesiąca plus w każdy piątek. Można
       jednak osiągnąć zamierzony efekt za pomocą dodania testu do polecenia (zob. ostatni
       przykład w PRZYKŁADOWEJ TABELI CRON poniżej).

       Zamiast pięciu pierwszych pól, może się pojawić jeden z ośmiu łańcuchów specjalnych:

       ┌──────────┬──────────────────────────────────┐
       │łańcuchznaczenie                        │
       ├──────────┼──────────────────────────────────┤
       │@reboot   │ Uruchamiany raz, przy rozruchu.  │
       ├──────────┼──────────────────────────────────┤
       │@yearly   │ Uruch. raz w roku, "0 0 1 1 *".  │
       ├──────────┼──────────────────────────────────┤
       │@annually │ (odpowiednik @yearly)            │
       ├──────────┼──────────────────────────────────┤
       │@monthly  │ Uruch. raz w miesiącu "0 0 1 *   │
       │          │ *".                              │
       ├──────────┼──────────────────────────────────┤
       │@weekly   │ Uruch. raz w tygodniu "0 0 * *   │
       │          │ 0".                              │
       ├──────────┼──────────────────────────────────┤
       │@daily    │ Uruch. raz dziennie "0 0 * * *". │
       ├──────────┼──────────────────────────────────┤
       │@midnight │ (odpowiednik @daily)             │
       ├──────────┼──────────────────────────────────┤
       │@hourly   │ Uruch. co godzinę "0 * * * *".   │
       └──────────┴──────────────────────────────────┘

       Proszę zauważyć, że rozruch w znaczeniu łańcucha @reboot jest momentem, w którym uruchamia
       się demon cron(8). W szczególności może to nastąpić przed uruchomieniem niektórych innych
       demonów i usług systemowych. Zależy to od sekwencji rozruchowej komputera.

PRZYKŁADOWA TABELA CRON

           # używaj /bin/sh do wywoływania komend, niezależnie od wartości
           # w /etc/passwd.
           SHELL=/usr/bin/sh
           # przesyłaj wyjście do użytkownika "paul", bez względu na
           # właściciela tabeli
           MAILTO=paul
           #
           # uruchamiaj się 5 minut po północy, codziennie
           5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
           # uruchamiaj się o 14:15 pierwszego w każdym miesiącu -- wyjście jest
           # przesyłane do użytkownika paul
           15 14 1 * *     $HOME/bin/monthly
           # uruchamiaj się o 22 w weekendy, denerwuj Joe.
           0 22 * * 1-5   mail -s "Jest 22" joe%Joe,%%Gdzie są twoje dzieci?%
           23 0-23/2 * * * echo "uruchamiaj 23 min po: północy, 2, 4 ..., codziennie"
           5 4 * * sun     echo "uruchamiaj o 4:05 w każdą niedzielę"
           0 */4 1 * mon   echo "uruchamiaj co 4. godzinę pierwszego i w każdy pon."
           0 0 */2 * sun   echo "uruchamiaj o północy każdej niedzieli przypadającej na nieparzystą datę"
           # Uruchamiaj w każdą drugą sobotę miesiąca
           0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "druga sobota"
           # To samo, wydajnie:
           0 4 * * * Sat   d=$(date +e) && test $d -ge 8 -a $d -le 14 && echo "druga sobota"
           #Uruchamiaj wczesnym rankiem po pierwszym czwartku
           #każdego miesiąca
           57 2 * * 5 case $(date +d) in 0[2-8]) echo "Po pierwszym czwartku"; esac

       Wszystkie powyższe przykłady uruchamiają programy nieinteraktywne. Aby uruchomić program,
       który wchodzi w interakcję z ekranem użytkownika, konieczne jest upewnienie się, że
       ustawiono prawidłową zmienną środowiskową DISPLAY.

           # Wykonuj program i uruchamiaj powiadomienie codzinnie o 10:00
           0 10 * * *  $HOME/bin/program | DISPLAY=:0 notify-send "Program uruchomiony" "$(cat)"

PRZYKŁADOWA SYSTEMOWA TABELA CRON

       Poniżej pokazano zawartość zwykłego, systemowego pliku crontab (z tym, że tu
       przetłumaczono komentarze — przyp. tłum.). W przeciwieństwie do tabel cron użytkowników,
       plik ten ma pole na nazwę użytkownika, takie jak używane przez /etc/crontab.

           # /etc/crontab: systemowy crontab
           # W odróżnieniu od innych crontab-ów, nie trzeba uruchamiać
           # polecenia "crontab" aby zainstalować nową wersję tego pliku
           # oraz plików w /etc/cron.d. Pliki te mają również pola na
           # nazwę użytkownika, w przeciwieństwie do innych crontab-ów.

           SHELL=/bin/sh
           PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

           # Przykładowa definicja zadania:
           # .---------------- minuta (0 - 59)
           # |  .------------- godzina (0 - 23)
           # |  |  .---------- dzień miesiąca (1 - 31)
           # |  |  |  .------- miesiąc (1 - 12) LUB jan,feb,mar,apr
           # |  |  |  |           may,jun,jul,aug,sep,oct,nov,dec
           # |  |  |  |  .---- dzień tygodnia (0 - 6) (niedziela=0
           # |  |  |  |  |        lub 7) LUB (od niedzieli): sun,mon,
           # |  |  |  |  |        tue,wed,thu,fri,sat
           # m g d-m ms d-t użytk. polecenie-do-wykonania
           17 * * * *  root  cd / && run-parts --report /etc/cron.hourly
           25 6 * * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
           47 6 * * 7  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
           52 6 1 * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
           #

       Proszę zauważyć, że domyślnie wszystkie zadania systemowe uruchomią się pomiędzy godziną
       06:00 a 07:00. W systemach, które nie były uruchomione w tym czasie, uruchomią się jedynie
       zadania godzinowe, chyba że zmieniono powyższe wartości domyślne.

KOLEJNY PRZYKŁAD

       W poniższym przykładzie widać, że liczby można poprzedzić zerami, aby wyrównać kolumny.

           17  * * * *  root  cd / && run-parts --report /etc/cron.hourly
           25 16 * * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
           47 06 * * 7  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
           52 06 1 * *  root  test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

ZOBACZ TAKŻE

       cron(8), crontab(1)

ROZSZERZENIA

       Podczas podawania dnia tygodnia, zarówno 0 jak i 7 jest uważane za niedzielę. BSD i AT&T
       nie zgadzają się z tym.

       Listy i zasięgi mogą koegzystować w tym samym polu. "1-3,7-9" będzie odrzucone przez crona
       AT&T i BSD — chcą one widzieć TYLKO "1-3" lub "7,8,9".

       Zakresy mogą zawierać "kroki", więc "1-9/2" jest tym samym co "1,3,5,7,9".

       Nazwy miesiąca lub dnia tygodnia mogą być podawane za pomocą (angielskiej) nazwy.

       W tabeli można ustawiać zmienne środowiskowe. W BSD i AT&T, środowisko przekazywane
       procesom potomnym jest po prostu tym z /etc/rc.

       Wyjście poleceń jest przesyłane właścicielowi tabeli (BSD nie tego potrafi), może być
       przesyłane do osoby innej niż właściciel tabeli (tego nie potrafi SysV) lub funkcja ta
       może być wyłączona i nie będzie wysyłana żadna poczta (SysV tego też nie potrafi).

       Wszystkie polecenia „@”, które mogą zająć miejsce pięciu pierwszych pól, są
       rozszerzeniami.

OGRANICZENIA

       Demon cron działa w zdefiniowanej strefie czasowej. Obecnie nie obsługuje przypisania
       stref czasowych użytkownikom. Wszystkie zadania: systemowe i użytkowników, zostaną
       uruchomione wedle skonfigurowanej strefy czasowej. Nawet, gdy użytkownik określi zmienną
       środowiskową TZ w swoim pliku crontab, wpłynie ona jedynie na polecenia wykonywane z pliku
       crontab, a nie na termin wykonania samych zadań crontab. Aby podać daną strefę czasową
       zadaniu crontab, można sprawdzić datę w skrypcie potomnym np.

           # m g d-m ms d-t polecenie-użytkownika

           TZ=UTC
           0 * * * * [ "$(date +\%R)" = 00:00 ] && uruchom_jakiś_skrypt

       POSIX określa, że jeśli dzień miesiąca lub dzień tygodnia wynosi *, znak ten zostanie
       dopasowany jako wartość bieżąca. Jednak niniejsza implementacja sprawdza jedynie, czy
       pierwszy znak wynosi *. Jest to powód, dla którego "0 0 */2 * sun" uruchomi się każdej
       nieparzystej niedzieli, podczas gdy standard POSIX uruchomiłby takie zadanie każdej
       niedzieli i w każdym dniu nieparzystym.

       Składnia crontab nie umożliwia zdefiniowania wszystkich możliwych okresów. Nie jest łatwo
       np. zdefiniować ostatni powszedni dzień miesiąca. Aby uruchomić zadanie w okresie, którego
       nie da się zdefiniować za pomocą składni crontab, najlepiej aby dany program sam sprawdzał
       datę i czas i kontynuował wykonanie jedynie, gdy odpowiadają one zadanego okresowi.

       Jeśli takiego sprawdzenia nie może dokonać sam program, wymagany będzie skrypt
       opakowujący. Przydatnymi narzędziami do analizy dat będą tu ncal lub calendar.
       Przykładowo, aby uruchomić program ostatniej soboty każdego miesiąca, można użyć
       poniższego kodu opakowującego:

           0 4 * * Sat   [ "$(date +\%e)" = "$(LANG=C ncal | sed -n 's/^Sa .* \([0-9]\+\) *$/\1/p')" ] && echo "Ostatnia sobota" && program_do_wykonania

KORZYSTANIE Z EVAL DO OPAKOWANIA RÓŻNYCH USTAWIEŃ ŚRODOWISKA

       Autorem poniższej wskazówki jest 積丹尼 Dan Jacobson:

           CONTENT_TYPE="text/plain; charset=UTF-8"
           d=eval LANG=zh_TW.UTF-8 w3m -dump
           26 22 16 1-12 * $d https://www.ptt.cc/bbs/transgender/index.html

       nie będzie działało, bez dokonania eval. Podanie w drugim wierszu samego

           d=LANG=zh_TW.UTF-8 w3m -dump

       da

           /bin/sh: LANG=zh_TW.UTF-8: nie znaleziono polecenia

DIAGNOSTYKA

       Program cron wymaga, aby każdy wpis w pliku crontab kończył się znakiem nowego wiersza.
       Jeśli ostatni wpis w pliku crontab nie będzie go posiadał (tzn. zakończy się bezpośrednio
       EOF — znakiem końca pliku), to cron stwierdzi, że crontab jest (przynajmniej częściowo)
       uszkodzony i odmówi jego instalacji. Ostrzeżenie zostanie wypisane do sysloga.

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

       Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys
       <pborys@dione.ids.pl>, Wojtek Kotwica <wkotwica@post.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⟩.