CRONTAB(5)

NAZWA
crontab - tabele dla 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.

Puste linie, spacje oraz tabulacje są ignorowane. Linie, w których pierwszym nie-białym znakiem jest `#', są komentarzami i też są ignorowane. Zauważ, że komentarze nie mogą wystąpić w tej samej linii co komendy crona, ponieważ będą one wtedy potraktowane jak część komendy. Podobnie, komentarze nie są dozwolone w liniach ustawień zmiennych środowiskowych.

Linia aktywna tabeli może być albo ustawieniem środowiska, albo komendą crona. Ustawienie zmiennej środowiskowej 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). Zachowa to początkowe i końcowe spacje.

Wiele zmiennych środowiskowych jest ustawianych automatycznie przez demona cron(8). SHELL jest ustawiany na /bin/sh, LOGNAME i HOME są ustawiane na podstawie linii /etc/passwd właściciela tabeli. Zmienne HOME i SHELL mogą być przeciążone przez ustawienia tabeli. 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.)

Dodatkowo, poza powyższymi zmiennymi, cron(8) będzie korzystał z MAILTO jeśli zajdzie potrzeba wysłania listu jako wyniku wykonania komend z ``tej'' tabeli. Jeśli MAILTO jest zdefiniowane, to list zostanie wysłany do wskazanego tam użytkownika. Jeśli MAILTO jest zdefiniowane, lecz puste (MAILTO=""), to nie są wysyłane żadne listy. W innych wypadkach listy są wysyłane do właściciela tabeli. Opcja ta jest użyteczna jeśli zdecydujesz się na mailer /bin/mail zamiast /usr/lib/sendmail podczas instalacji crona -- /bin/mail nie robi aliasowania, a UUSP zwykle nie czyta jego listów.

Format komendy crona jest podobny do standardu V7, z wieloma rozszerzeniami. Każda linia ma pięć pól czasu i daty, za którymi znajduje się nazwa użytkownika (jeśli jest to tabela systemowa), oraz komenda. Komendy 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) odpowiadają czasowi bieżącemu (zobacz ``Uwagi'' poniżej). Zauważ, że oznacza to, iż nieistniejace czasy, jak "brakujące godziny" podczas konwersji związanej ze zmianami czasu z uwagi na oszczędność energii, [czas letni/zimowy] nigdy nie będą pasować. Zatem zadania zaplanowane na takie "brakujące czasy" nie zostaną uruchomione. Podobnie, czas występujący więcej niż raz (znów, przypadek zmiany czasów, w drugim kierunku) spowoduje, że odpowiadające mu zadania będą uruchomione dwukrotnie. cron(8) testuje wpisy tabel co minutę. Pola czasu i daty to:

    Pole    dozwolone wartości
    -----    --------------
    minuta    0-59
    godzina    0-23
    dzień miesiąca    0-31
    miesiąc    0-12 (lub nazwy, patrz niżej)
    dzień tygodnia    0-7 (0 lub 7 jest niedzielą, lub użyj nazw)

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. Np, 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. Wartości krokowe dozwolone są też za gwiazdkami, więc jeśli chciałbyś powiedzieć ``co drugą godzinę'', użyj po prostu ``*/2''.

Dla ``miesięcy'' i ``dni tygodnia'' można używać również nazw. Użyj 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 linii) określa komendę, jaką należy wykonać. Cała część komendowa linii, aż do nowej linii, lub znaku %, zostanie wykonana przez /bin/sh, lub przez inną powłokę, jaką podałeś w zmiennej SHELL pliku crona. Procenty w komendzie (%), o ile nie są chronione odwrotnymi ukośnikami, zostaną zamienione w znaki nowej linii, a wszelkie dane za pierwszym % zostaną przesłane na standardowe wejście komendy.

Uwaga: Dzień wywołania komendy może być podany w dwóch polach — dniu miesiąca, i dniu tygodnia. Jeśli obydwa pola są podane (np, nie są *), to komenda zostanie wywołana gdy dowolne z pól będą odpowiadały bieżącemu czasowi. Na przykład,
``30 4 1,15 * 5'' spowoduje wywołanie komendy o 4:30am pierwszego i 15-tego każdego miesiąca plus każdy piątek.

PRZYKŁADOWA TABELA
# używaj /bin/sh do wywoływania komend. Nie ważne co jest w /etc/passwd.
SHELL=/bin/sh
# przesyłaj wyjście do użytkownika paul
MAILTO=paul
#
# uruchamiaj się 5 minut po północy, codziennie
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# uruchamiaj się od 2:15pm 1-szego w każdym miesiącu -- wyjście jest
# przesyłane do paul'a
15 14 1 * *     $HOME/bin/monthly
# uruchamiaj się o 10 pm w weekendy, denerwuj Joe.
0 22 * * 1-5	mail -s "Jest 10pm" joe%Joe,%%Gdzie są twoje dzieci?%
23 0-23/2 * * * echo "uruchamiaj 23 min po polnocy, 2am, 4am ..., codziennie"
5 4 * * sun     echo "Uruchamiaj się 5 po 4 w niedziele"

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 ATT nie zgadzają się z tym.

Listy i zasięgi mogą koegzystować w tym samym polu. "1-3,7-9" będzie odrzucone przez crona ATT 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 przez nazwę.

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

Jeżeli uid właściciela jest równy 0, może on użyć "-" jako pierwszego znaku pozycji tabeli. Wówczas cron nie zapisze w dzienniku syslog komunikatu o tym poleceniu.

Wyjście komend 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).

AUTOR
Paul Vixie <paul@vix.com>