PORADNIKI

8 min. czytania

Co to jest cron? Jak działa? Jak używać?

Cron

Fot. MM

Jak działa Cron i czym jest Crontab? Poznaj tajniki automatyzacji poleceń i budowę pliku Cron. Dowiedz się, jakie zadania możesz wykonać z jego pomocą i jak je stworzyć krok po kroku.

Spis treści
Serwer

Chcesz jednorazowo uruchomić zadanie w systemie UNIX czy Linux? Nie powinieneś mieć z tym większego problemu. Co jednak, jeśli zależy Ci na jego powtarzalności i regularności wykonywania? Załóżmy, że coś ma się dziać w dany dzień tygodnia, zawsze o określonej godzinie. Nie będziesz przecież czekać, by wpisywać zawsze w danym terminie takie samo polecenie w kółko. Możesz wszystko błyskawicznie zautomatyzować i to w bardzo łatwo sposób.

Z pomocą przychodzi tu Cron. Jego zadaniem jest uruchamianie skryptu lub polecenia w ściśle określonym terminie. Jako użytkownik Linuxa lub UNIX-a możesz stworzyć listę okresowych zadań. W ten sposób usprawnisz i zautomatyzujesz swoją pracę. Sprawisz, że będzie ona wykonywana zawsze punktualnie i przy minimalnym zaangażowaniu użytkownika.

W praktyce Cron jest po prostu menadżerem procesów w tle. Takie rozwiązania w środowisku programistów i administratorów nazywane są demonami (ang. daemon). Możesz wykorzystywać go do cyklicznego uruchamiania rozmaitych zadań na serwerze. Niezbędny jest natomiast do tego plik crontab oraz znajomość struktury tego rozwiązania.

Co to jest Cron? Definicja

Cron to program służący do planowania i wykonywania zadań w Linuksie i systemach z rodziny UNIX-a. Pozwala na uruchamianie programów, skryptów i komend w danym terminie lub w określonych odstępach czasowych.

Dzięki niemu skrypty, które powinny być wykonywane regularnie, są uruchamiane bez udziału użytkowników. Co więcej, zadaniami zarządzać mogą różne osoby, które otrzymają do nich uprawnienia. Program bowiem nie tylko jest w stanie je wykonywać, ale rozpoznawać ich twórców. Przesyła im ponadto raporty z uruchomienia komendy drogą mailową.

To rozwiązanie sprzyjające automatyzacji wykonywanych procesów. Korzystanie z niego nic nie kosztuje, a może przyśpieszyć realizację wymaganych operacji. Porównywany bywa do UNIX-owego harmonogramu zadań, znanego z system Windows. Może zostać uruchomiony w panelu hostingu, gdzie ustawisz go z pomocą intuicyjnego, graficznego interfejsu. Alternatywnym rozwiązaniem jest korzystanie z linii poleceń. To natomiast rozwiązanie dla dość zaawansowanych użytkowników.

Kiedy warto korzystać z Cron?

Procesy oraz termin (lub harmonogram) ich wykonania określone są w pliku crontab. Wiesz już, że Cron przegląda w tle katalogi co minutę. Wykonuje polecenia, które zawiera skrypt, jeśli zaplanowane są na dany czas. W jakim przypadku natomiast możesz wykorzystać to rozwiązanie we własnym projekcie? Otóż okaże się on niezastąpiony np. przy:

  • uruchomieniu regularnego cyklu tworzenia kopii zapasowych,
  • automatyzowaniu aktualizacji systemu,
  • wysyłaniu comiesięcznych (cotygodniowych, codziennych itp.) raportów,
  • pobieraniu danych z narzędzi analitycznych (np. Google Analytics czy GSC).

Cron został stworzony tak, by dało się bardzo precyzyjnie określić termin wykonania danego zadania. Możesz zaznaczyć, by było realizowane np. od poniedziałku do piątku albo miesiąc o danej godzinie. Nic też nie stoi na przeszkodzie, aby zarządzić jeden, potężny raport, wykonywany co roku 1 stycznia. W praktyce więc Cron istnieje po to, by usprawnić pracę Twoją i innych użytkowników. Oszczędzasz dzięki niemu czas i masz pewność, że każde zaprogramowanie zadanie na pewno zostanie zrealizowane.

Jak wygląda budowa pliku Cron?

Polecenie crontab pozwala na:

  • tworzenie,
  • edytowanie,
  • instalowanie,
  • odinstalowywanie zadań.

Pliki konfiguracyjne występują pod dwiema głównymi postaciami:

  • dla Crontab systemu (Linux lub UNIX) — wykorzystywany przez zadania krytyczne i usługi wymagające uprawnień root.
  • dla użytkownika crontabs — każda osoba z odpowiednimi uprawnieniami może wprowadzać własne zadania za pomocą polecenia crontabs.

Składnia crontab jest następująca:

1 2 3 4 5 /patch/to/command

Kolejno opisać to można jako:

  • 1minuty (od 0 do 59),
  • 2godziny (od 0 do 23),
  • 3dni (od 0 do 31)
  • 4miesiące (od 0 do 12),
  • 5dni tygodnia (od 0 do 7. – 0 i 7 to niedziela),
  • /patch/to/commandścieżka prowadząca do danego polecenia czy skryptu.
Cron - wyjaśnienie

Co to crontab?

Crontab wykorzystywany jest do tworzenia zadań, które następnie odczytuje i wdraża Cron. Może to brzmieć dość abstrakcyjnie, szczególnie dla osób początkujących. Czy jednak to układ skomplikowany i trudny do stworzenia? Wręcz przeciwnie! To zwyczajny plik tekstowy, najłatwiejszy i najwygodniejszy do zarządzania komendami Cron. Zadania użytkownika ograniczają się jedynie zatem do:

  1. stworzenia odpowiedniego pliku,
  2. zapełnienia go poprawną treścią,
  3. umieszczeniu go na serwerze,
  4. wydania komendy.

Operatory

Polecenie w crontab może zawierać kilka rodzajów operatorów. Zależnie od potrzeb użytkownika, program jest w stanie odczytać:

  • przecinek (,) — przy jego użyciu możliwe jest stworzenie listy odrębnych wartości, np. 1, 2, 3 itd.,
  • separator (/) — służy do określania wartości kroku. To przydatne, gdy chcesz, by dane zadanie było wykorzystywane np. co drugą godzinę – */2,
  • myślnik (-) — pozwala na określenie zakresu wartości, np. 1-5 dni. Bywa wykorzystywany zamiast przecinka. 1-5 przynosi taki sam efekt co 1, 2, 3, 4, 5.
  • gwiazdkę (*) — określa wszystkie możliwe wartości pola. Wstawienie gwiazdki w polu godziny oznacza wykonywanie danej operacji co godzinę (przez wszystkie godziny z zakresu 0-23).

Witryną przydatną przy tworzeniu poleceń w crontab jest Crontab.guru. Możesz wpisać w niej swoje rozwiązanie. System automatycznie rozpisze jego strukturę na poszczególne pola w czytelny sposób. Dzięki temu szybko zorientujesz się, czy na pewno nigdzie nie wkradł się żaden błąd.

Crontab.guru

Przykłady wyrażeń Cron

Możliwości Crona są bardzo rozbudowane. Zadania mu delegowane mogą dzięki temu przybierać rozmaite formy. Skomplikowane bywa natomiast opanowanie parametrów liczbowych zawartych w pięciu pierwszych polach. Do korzystania z nich trzeba się przyzwyczaić i wymaga to nieco więcej wprawy i ćwiczeń. Poniżej przygotowaliśmy zestawienie podstawowych oraz nieco bardziej skomplikowanych poleceń. Na ich podstawie łatwiej zrozumiesz zasady działania tego systemu.

Częstotliwość wykonywania Pola liczbowe
Co godzinę 0 * * * *
Codziennie (1 raz) 0 0 * * *
Co tydzień (1 raz) 0 0 * * 0
Co miesiąc (1 raz) 0 0 1 * *
Co roku (1 raz) 0 0 1 1 *
Co minutę * * * * *
Co 5 minut */5 * * * *
o 10:00 od pon. do śr. 0 10 * * 1-3

Jak dokładnie działa Cron?

Zadaniem Crona jest co minutę:

  • przeszukiwanie pliku /etc/crontab,
  • sprawdzanie katalogu /var/spool/cron/crontabs.

W pierwszym znajdują się reguły określające zasady działania programu. W drugim z kolei lokalizuje pliki-tabele nazywane crontabami, tworzone przez użytkowników. Następnie sprawdza czas ich ostatniej modyfikacji.

Jeśli w ciągu ostatniej minuty doszło do zmiany wpisów, tabela jest przeładowywana. Dzięki takiej metodzie działania rozwiązanie to funkcjonuje automatycznie. Oznacza to, że nie trzeba go resetować i uruchamiać na nowo za każdym razem, po stworzeniu nowego wpisu. Wspomnieć w tym miejscu trzeba też o katalogach, określających częstotliwość wykonania zadań. Definiują one, czy dane zadanie ma odbywać się w określonych godzinach, co kilka dni, tygodni itd., np. /etc/cron:

  • .daily — codziennie,
  • .weekly — co tydzień,
  • .monthly — co miesiąc,
  • .yearly — co roku.

W przypadku Crona masz do dyspozycji jeszcze dwa inne pliki:

  • /etc/cron.deny — uniemożliwia korzystanie z oprogramowania użytkownikom, którzy zostaną wymienieni w pliku. Jeśli pozostanie pusty, Cron-job będzie dostępny dla wszystkich;
  • /etc/cron.allow — pozwala na korzystanie z Crona użytkownikom, którzy zostaną wymienieni. Pusty plik oznacza, że nikt nie może korzystać z oprogramowania.

Co się stanie, jeśli użytkownik ma już zadania w swoim crontabie, a zostanie dodany do /etc/cron.deny? Nadal będą one wykonywane. Zmieni się jednak to, że komenda nie będzie mogła już być edytowana przez osobę, która ją stworzyła. Z wymienionych wyżej reguł nie korzystają oczywiście użytkownicy root.

Jak uruchomić Crona w panelu hostingu krok po kroku?

Crona uruchomisz łatwo z poziomu swojego panelu administracyjnego u hostingodawcy. Zależnie od firmy, może znajdować się w różnych miejscach. Najczęściej natomiast znalezienie go nie jest specjalnym problemem. W innym przypadku skontaktuj się z supportem swojego usługodawcy. Obsługa klienta powinna błyskawicznie wskazać Ci miejsce terminarza zadań. My jako przykładem posłużymy się tu panelem SeoHost. Wystarczy w nim jedynie, że po zalogowaniu się do DirectAdmin rozwiniemy zakładkę „Funkcje zaawansowane”.

Funkcje zaawansowane w panelu Direct Admin

Naciśnij „Zadania Cron„. System przekieruje Cię do zakładki pozwalającej zarządzać zaplanowanymi akcjami. Aby stworzyć nową, kliknij zielony przycisk „Utwórz zadanie Cron„.

Zadania cron w panelu DA

Teraz możesz przejść do konfiguracji konkretnego zadania. Intuicyjny interfejs pozwoli Ci szybko ustawić:

  • opcję uruchamiania zadania przy starcie serwera,
  • minutę,
  • godzinę,
  • dzień miesiąca,
  • miesiąc,
  • dzień tygodnia,
  • komendę.

Przy wypełnianiu pól kieruj się tu budową zadań, którą opisywaliśmy powyżej.

Tworzenie zadania cron w DA

Po zbudowaniu całego zadania wystarczy, że naciśniesz „Utwórz”. Możesz też od razu wprowadzić żądanie wysyłania powiadomień na e-mail. Jeśli wybierzesz tę opcję, system nie będzie informował Cię o przeprowadzeniu akcji.

Dodawanie zadania Cron z linii poleceń

Wyżej wspomnieliśmy, jak stworzyć zadanie w crontab w panelu hostingowym. Teraz więc przyjrzyjmy się temu procesowi od strony wiersza poleceń. To rozwiązanie dla bardziej zaawansowanych użytkowników. Na przykładzie natomiast łatwiej będzie Ci zrozumieć, na czym polega działanie tego oprogramowania.

Załóżmy, że chcesz, by skrypt PHP uruchamiał się w dni powszednie, codziennie o 20:00. Przykładowy, pełny szereg czynności, które musisz wykonać (zależnie od wersji PHP), jest następujący:

  1. Zaloguj się do shella/SSH (narzędzie do kontroli serwera).
  2. Stwórz w dowolnym edytorze plik cron.txt (możesz też zrobić to na swoim komputerze, lokalnie. Wtedy jednak pamiętaj, by przetransportować go przy użyciu SFTP, FTPs lub FTP na serwer).
  3. Wpisz treść do pliku cron.txt. Może to być np.: 0 20 * * 1-5 /usr/local/php80/bin/php $HOME/public_html/plik_do_uruchomienia.php
  4. Pamiętaj, by na końcu nacisnąć ENTER.
  5. Wydaj komendę w shellu/SSH:
    crontab ./cron.txt

Jeśli wszystko poszło zgodnie z planem, zadanie zostało dodane poprawnie. Zostanie zrealizowane przez program we wskazanym przez Ciebie terminie.

Jak sprawdzić, czy Cron działa prawidłowo?

Aby przekonać się, czy Cron działa, wystarczy wyświetlić efekt jego pracy. Otwórz plik zadania i sprawdź, czy znajdują się tam wiersze z kolejnymi datami oraz godzinami. Jeśli ich tam nie ma, sprawdź plik zawierający dane wyjściowe. Powinieneś znaleźć tam wszelkie informacje o błędach, które ewentualnie wykrył system.

Czy da się wyłączyć powiadomienia e-mail od Crona?

Domyślnie Cron informuje autora zadania o jego poprawnym wykonaniu. „Raport” wysyłany jest na lokalne konto e-mail, a zawiera on domyślnie dane wyjściowe skryptu. Może być to jednak rozwiązanie dość irytujące. Szczególnie na jego wyłączeniu zależy zwykle osobom tworzącym wiele cyklicznych poleceń. W przypadku Crona uruchamianego na koncie hostingowym rezygnację z e-maili opisywaliśmy powyżej. Na szczęście „anulowanie” powiadomień w przypadku wiersza poleceń również nie należy do skomplikowanych.

Aby je wykonać, musisz jedynie do komendy dodać >/dev/null 2>&1. Na potrzeby artykułu posłużmy się wymyślonym przykładem komendy:

15 * * 11 * user/home/backup.sh >/dev/null 2>&1

Czy warto korzystać z Crona?

Cron przyda się praktycznie każdemu, kto wykonuje większą liczbę zadań na serwerze. To rozwiązanie stanowi ważny element efektywnego zarządzania pracą. Odciąża użytkownika, przesyłając mu tylko informację o wykonaniu zaprogramowanego zadania. W czasie pracy programu Ty możesz swobodnie zajmować się innymi obowiązkami. Wprowadzanie nowych poleceń też nie zabiera wiele czasu i nie wymaga nawet restartowania oprogramowania.

Świetnie sprawdza się przy projektach, w których uczestniczy większa liczba użytkowników. Pozwala na łatwą konfigurację i nadzorowanie wykonywania zlecanych zadań. Z poziomu root możliwe jest kontrolowanie oraz wykluczanie wszystkich osób zaangażowanych w realizację. Jeśli zajdzie taka potrzeba, wprowadzisz też (lub anulujesz) system powiadomień o danych działaniach. Wszystko to zapewnia wzrost efektywności, ale i porządkuje oraz systematyzuje wykonywane czy planowane zadania.