Rozdział 15 · 15.1
Zadania Cron: automatyczne uruchamianie zadań
Zobacz w krótkim filmie
Zadanie cron (lub cronjob) to polecenie, które serwer wykonuje za Państwa o ustalonych porach. Na przykład co noc skrypt porządkujący stare dane, co godzinę połączenie z księgowością, albo zaplanowane zadania WordPressa lub Laravela. Ustawia się to w sekcji Zadania Cron, w Funkcje zaawansowane.

Zasady u WebOké
Serwer jest współdzielony z innymi stronami. Dlatego obowiązują zasady dotyczące zadań cron:
- Niech zadanie uruchamia się maksymalnie raz na 10 minut. Prosimy o to wszystkich naszych klientów. Serwer tego nie wymusza, ale zadanie uruchamiane częściej spowalnia serwer, zarówno dla Państwa, jak i innych użytkowników. Jeśli mają Państwo kilka zadań, niech nie uruchamiają się wszystkie w tym samym momencie.
- Niech zadanie będzie krótkie. Jeśli trzeba wykonać dużo pracy, warto rozłożyć ją na kilka etapów.
Tworzenie zadania
- W DirectAdmin w sekcji Funkcje zaawansowane kliknąć Zadania Cron.
- Kliknąć UTWÓRZ ZADANIE CRON.
- W polach Minuta, Godzina, Dzień miesiąca, Miesiąc i Dzień tygodnia wpisać, kiedy zadanie ma się uruchamiać (1). Gwiazdka * oznacza "każdy/każda".
- Pod polami czasu, przy Zadanie cron zostanie uruchomione: (2), widać zwykłym tekstem, kiedy zadanie będzie działać. Proszę to sprawdzić.
- W polu Polecenie (3) wpisać, co ma się wykonać, podając pełne ścieżki (patrz niżej).
- Jeśli nie chcą Państwo otrzymywać e-maila po każdym uruchomieniu, proszę kliknąć UNIKAJ E-MAILI (4).
- Kliknąć UTWÓRZ (5).

Zadanie pojawi się następnie na liście. Aby je usunąć, proszę je zaznaczyć (1) i kliknąć Usuń.

Przykłady harmonogramów
| Minuta | Godzina | Dzień miesiąca | Miesiąc | Dzień tygodnia | Znaczenie |
|---|---|---|---|---|---|
| 30 | 3 | * | * | * | Codziennie o 03:30 |
| */10 | * | * | * | * | Co 10 minut |
| 0 | * | * | * | * | Co pełną godzinę |
| 15 | 8 | * | * | 1-5 | W dni robocze o 08:15 (1 to poniedziałek, 0 lub 7 to niedziela) |
| 0 | 2 | 1 | * | * | Pierwszego dnia każdego miesiąca o 02:00 |
Wartości można oddzielać przecinkami (1,15,30), zakres można podać myślnikiem (5-7), a interwał za pomocą */ (*/2 oznacza co drugi). Najlepiej wybrać spokojną, losową porę, na przykład 03:17 zamiast dokładnie północy.
Polecenie: pełne ścieżki
Zadanie cron nie wie, w którym folderze ma zacząć działanie. Dlatego należy zawsze używać pełnych ścieżek. Pakiet znajduje się na serwerze w folderze /home/, po którym następuje nazwa użytkownika DA (zob. Znajdowanie nazwy serwera i nazwy użytkownika DA).
Uruchomienie skryptu PHP:
/usr/local/bin/php /home/nazwa_uzytkownika/domains/twojadomena.nl/public_html/zadanie.php
Zostanie przy tym użyta ta sama wersja PHP co dla strony, czyli wersja ustawiona w Select PHP version (zob. Wybór wersji PHP (Select PHP version)).
Wywołanie adresu internetowego (na przykład jeśli oprogramowanie podaje adres URL cron):
curl --silent https://www.twojadomena.nl/cron.php > /dev/null
WordPress: WordPress domyślnie uruchamia swoje zaplanowane zadania przy każdej wizycie odwiedzającego. Przy ruchliwej stronie lub stronie z małą liczbą odwiedzin lepiej zrobić to za pomocą zadania cron. Należy wtedy w pliku wp-config.php umieścić define('DISABLE_WP_CRON', true); i utworzyć zadanie, które co 15 minut uruchamia /usr/local/bin/php /home/nazwa_uzytkownika/domains/twojadomena.nl/public_html/wp-cron.php.
Laravel: /usr/local/bin/php /home/nazwa_uzytkownika/domains/twojadomena.nl/artisan schedule:run. Uwaga: schedule:run wykonuje tylko zadania przypadające dokładnie na moment uruchomienia zadania cron. Jeśli cron działa co 10 minut, zadanie zaplanowane na 08:05 nigdy się nie uruchomi.
E-mail po każdym zadaniu
Jeśli zadanie generuje wyjście (tekst lub komunikat błędu), serwer może je wysłać e-mailem. Dzieje się tak tylko wtedy, gdy ustawiono adres. Są trzy możliwości:
- E-mail na własny adres: proszę kliknąć WYŚLIJ WSZYSTKIE WYJŚCIA WYKONANYCH ZADAŃ CRON NA E-MAIL, wpisać adres e-mail i kliknąć ZAPISZ. Dotyczy to wszystkich zadań. Jeśli pole pozostanie puste, e-mail nie zostanie wysłany.
- Brak e-maila dla jednego zadania: podczas tworzenia zadania proszę kliknąć UNIKAJ E-MAILI. Wtedy za poleceniem zostanie dodane >/dev/null 2>&1 i wyjście tego zadania zostanie pominięte, nawet jeśli ustawiono adres.
- Wyjście w pliku dziennika: proszę dodać za poleceniem >> /home/nazwa_uzytkownika/cron-log.txt 2>&1. Wtedy w Menedżerze Plików będzie można później sprawdzić, co zrobiło zadanie. Taki plik warto od czasu do czasu uporządkować.

Wskazówka: Proszę ustawić adres na czas testowania nowego zadania. Dzięki temu od razu widać, czy działa. Potem można to wyłączyć lub przekierować wyjście do pliku dziennika. E-maile z zadań cron liczą się do limitu wysyłki w pakiecie (zob. Verzendlimieten en de melding 'message limit reached').
Najczęściej zadawane pytania
Moje zadanie zwraca błąd "Could not open input file".
Ścieżka do skryptu jest nieprawidłowa. Proszę sprawdzić pełną ścieżkę w Menedżerze Plików: powinna zaczynać się od /home/nazwa_uzytkownika/domains/.
Mój skrypt działa w przeglądarce, ale nie jako zadanie cron.
Skrypt uruchamiany przez cron nie wie, pod jaką stroną działa: $_SERVER['SERVER_NAME'] oraz $_SERVER['DOCUMENT_ROOT'] są puste, a ścieżki względne w include działają inaczej. Proszę używać w skrypcie pełnych ścieżek albo wywoływać skrypt przez curl, podając adres internetowy.
Czy mogę zobaczyć, kiedy zadanie zostało wykonane?
DirectAdmin nie zapisuje tego automatycznie. Dlatego warto skonfigurować zadanie tak, aby zapisywało wyjście do pliku dziennika, wraz z datą (na przykład date >> /home/nazwa_uzytkownika/cron-log.txt jako pierwsze polecenie, oddzielone ;).
Co robi opcja Uruchamiaj przy starcie serwera?
Wtedy zadanie uruchamia się tylko przy ponownym starcie serwera, a nie o ustalonych porach. Przy zwykłej stronie internetowej jest to potrzebne niemal nigdy.
