Linux

Cron nie działa? Harmonogram, ścieżki i logi krok po kroku

Dlaczego polecenie działa w terminalu, ale nie w cronie? Sprawdź użytkownika, PATH, katalog roboczy, strefę czasu i nakładanie się zadań.

KRÓTKA ODPOWIEDŹ

Cron działa w innym środowisku niż interaktywny terminal. Użyj pełnych ścieżek, jawnego katalogu roboczego i logu. Sprawdź też użytkownika zadania oraz lokalną strefę czasu.

Czy zadanie jest w odpowiedniej tabeli?

Crontab użytkownika i /etc/crontab mają inny format. W crontab -e wpis nie zawiera dodatkowej kolumny użytkownika. W systemowej tabeli i plikach /etc/cron.d taka kolumna występuje. Przeniesienie wpisu bez zmiany formatu może sprawić, że cron spróbuje wykonać niewłaściwe polecenie.

Sprawdź crontab -l dla właściwego konta. Na hostingu zadanie może być ustawione w panelu, a dostęp do systemowej usługi niedostępny. Ustal, jaki interpreter i pełna ścieżka do katalogu konta są właściwe dla tego środowiska.

Zapisz prosty test z logowaniem

Przykład dla crontab użytkownika uruchamia zadanie co 15 minut: ``cron */15 * * * * cd /home/user/app && /usr/bin/php task.php >> /home/user/logs/task.log 2>&1 `` W tym przykładzie katalog logs musi wcześniej istnieć i być zapisywalny przez użytkownika. Ścieżki zastąp rzeczywistymi. && sprawia, że zadanie nie wykona się w złym katalogu, gdy cd zawiedzie. PHP w terminalu może korzystać z innej konfiguracji niż PHP na stronie.

Nie oczekuj automatycznego wczytania całego profilu powłoki. Wartości PATH, klucze i zmienne aplikacji przygotuj jawnie w kontrolowanym środowisku. Nie wpisuj sekretów w poleceniu, które będzie widoczne w logach lub procesach.

Sprawdź harmonogram i czas

Pięć pól określa minutę, godzinę, dzień miesiąca, miesiąc i dzień tygodnia. Dla zadań łączących dzień miesiąca i tydzień znaczenie może być inne niż intuicyjne „oba warunki muszą pasować” — sprawdź dokumentację użytej implementacji. Harmonogram nocny trzeba też rozumieć w kontekście lokalnej strefy oraz zmiany czasu.

Przy klasycznym cronie znak procenta w poleceniu ma specjalne znaczenie, jeżeli nie został odpowiednio zabezpieczony. Jeśli data w nazwie pliku działa w terminalu, a nie w harmonogramie, to jedna z rzeczy do sprawdzenia. Nie kopiuj złożonego polecenia bez testu w docelowej tabeli.

Zadanie działa, ale wynik jest niewłaściwy

Sprawdź prawa do plików, aktualny katalog, interpreter, kody wyjścia i log. Zależności mogą wymagać dostępu sieciowego lub konfiguracji, której brak w środowisku crona. W aplikacjach billingowych powtarzane próby mogą również ponawiać operację biznesową — upewnij się, że zadanie poprawnie obsługuje ponowienie.

Jeśli poprzednia instancja trwa dłużej niż odstęp harmonogramu, zadania mogą się nakładać. Użyj mechanizmu blokady właściwego dla aplikacji lub narzędzia flock, jeżeli jest dostępne. Nie ustawiaj wykonywania co minutę jako sposobu na ukrycie niedziałającego zadania.

Jak zakończyć naprawę

Wykonaj test jako ten sam użytkownik, zaczekaj na rzeczywiste uruchomienie z harmonogramu i sprawdź rezultat w aplikacji. Ustal rotację logu, aby nie doprowadzić do pełnego dysku. Dla FOSSBilling sprawdź aktualną instrukcję crona projektu zamiast zgadywać endpoint. Na hostingu Castpol użyj metod udostępnionych dla swojego konta.

Źródła i dokumentacja

Dokumentacja do dalszej weryfikacji ustawień i wymagań swojej wersji.

c.
Castpol Blog

Poradnik wydawany przez Castpol. O blogu · Zgłoś poprawkę

KOLEJNY KROK

Te poradniki uzupełniają temat